Краткий ответ ...
Да , оптимизатор достаточно умен.
Чем дольше ответ ...
SQL является декларативным, а не обязательным: ваш запрос представляет собой описание критериев, которым должны соответствовать ваши результаты, это , а не пошаговые инструкции о том, как генерировать эти результаты.
Оптимизатор выполняет запрос в наиболее эффективном порядке. Он не гарантирует оценку ваших предложений в каком-либо конкретном порядке или даже оценку их вообще - если он может получить правильные результаты без оценки конкретного предложения, то зачем это беспокоит?
Фактический порядок оценки любого конкретного запроса является подробностью реализации и может изменяться со временем (например, при изменении статистики в таблице).
На практике оптимизатор может иногда ошибаться, но в этом конкретном случае - сравнивая переменную с NULL с чтением из таблицы или индекса - я не думаю, что есть большая вероятность того, что это испортится, хотя вы можете захотеть рассмотрите возможность использования OPTION(RECOMPILE)
или OPTION(OPTIMIZE FOR ...)
.