Да и нет.
(ниже относится исключительно к SQL Server
)
Некоторые операторы замыкают накоротко, а некоторые нет. OR
CAN короткое замыкание, но может не зависеть от порядка операций, выбранного механизмом запросов.
CASE
(я считаю) на 100% гарантировано короткое замыкание.
Вы также можете попробовать установить порядок оценки с помощью вложенных скобок, например:
IF ((X) OR Y)
Но я не уверен, что это всегда также соответствует.
Проблема с SQL в этом отношении заключается в том, что он декларативный, а фактическая логика выполняется движком. На самом деле может оказаться более эффективным проверить сначала Y
на вашем примере, а затем проверить X
- если, например, Y
проиндексирован и X
требует сканирования таблицы.
Для справки:
Из документации ANSI-SQL из этого ответа:
Там, где приоритет не определяется форматами или
скобки, эффективная оценка выражений, как правило,
выполняется слева направо. Однако зависит от реализации
оцениваются ли выражения слева направо, особенно
когда операнды или операторы могут вызвать условия или если
результаты выражений могут быть определены без
оценивая все части выражения.