TGViewer
SQL Portal | Базы Данных SQL Portal | Базы Данных @sqlportal · 13.8K subscribers
Post #1630 2.07K
Никогда не предполагайте, что SQL вычисляет условия слева направо

Если вы пишете код так:

SELECT * FROM products 
WHERE price > 100
AND (total_sales / price) > 10;


Можно предположить, что запрос будет вычисляться слева направо, и это предотвратит ошибку деления на ноль. Однако это не всегда так. Большинство крупных SQL-баз данных НЕ гарантируют short-circuit-вычисление условий AND в WHERE. И даже если в простых случаях кажется, что short-circuit работает, оптимизатор часто перестраивает или вычисляет выражения вне исходного порядка по соображениям производительности.

Это означает, что база данных может попытаться вычислить:

total_sales / price

раньше, чем:

price > 100.

То есть, если какое-либо значение в price равно нулю, может возникнуть ошибка деления на ноль.

Таким образом, даже несмотря на то, что логически условие price > 100 должно предотвращать деление на ноль, фактический порядок выполнения не гарантирует этого.

Чтобы обезопасить себя, можно использовать оператор NULLIF в WHERE:

SELECT *
FROM products
WHERE price > 100
AND (total_sales / NULLIF(price, 0)) > 10;


Никогда не используйте деление в WHERE, если знаменатель не защищён через NULLIF(), не переписан в умноженную форму (например, numerator > denominator * constant) или не обёрнут в CASE.

👉 @SQLPortal
  • 👍 9
  • 🏆 2
  • 🤔 1
More from @sqlportal
  1. Oct 13, 2026SQL помогает получить данные. Статистика — понять, что они означают 20 статистических поня…
  2. Oct 12, 2026Команды SQL проще запомнить по назначению • DDL — создание и изменение структуры БД: CREAT…
  3. Oct 12, 2026Pandas: Python для повседневных задач аналитика 🐼 Загрузить файлы с неаккуратными данными…
  4. Oct 11, 2026Чтобы запросы оставались быстрыми, понятными и справлялись с ростом объёма данных, нужны х…
  5. Oct 11, 2026SQL: порядок написания ≠ порядок обработки Запрос начинается с SELECT, но логически обраба…
  6. Oct 10, 2026Какие навыки нужны дата-инженеру? В вакансиях прослеживается закономерность: на первом мес…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →