Да. CASE имеет гарантированный порядок исполнения, а OR - нет. Многие программисты полагаются на короткое замыкание ИЛИ и удивляются, узнав, что ориентированный на множество декларативный язык, такой как SQL, не гарантирует короткое замыкание логического оператора.
Сказанное с использованием OR и CASe в предложениях WHERE является плохой практикой. Разделите условие на четкое выражение IF и задайте отдельные запросы для каждой ветви:
IF @col1 IS NOT NULL
SELECT ... WHERE col1 = @col1;
ELSE
SELECT ... WHERE <alternatecondition>;
Помещение условия в WHERE обычно побеждает оптимизатор, который не может угадать, каким будет @ col1, и выдает неверный план, включающий полное сканирование.
Обновление
Поскольку мне надоело снова и снова объяснять, что логическое короткое замыкание не гарантируется в SQL, я решил написать об этом целую колонку блога: Короткое замыкание логического оператора SQL Server . Там вы найдете простой пример счетчика, показывающий, что логическое короткое замыкание не только не гарантировано , но и полагаться на него на самом деле может быть очень опасным, поскольку может привести к ошибки времени выполнения .