Я работал над оптимизацией запроса и столкнулся с ситуацией, которая заставляет меня задаться вопросом, как я всегда использовал оператор ИЛИ SQL. (SQL Server 2000 также)
У меня есть запрос, где условное (WHERE) предложение выглядит примерно так:
WHERE (Column1 = @Param1 or Column1 LIKE @Param1 + '%')
AND (@Param2 = '' OR Column2 = @Param2 OR Column2 LIKE @Param2 + '%')
Теперь я всегда понимал, что OR в SQL вычисляет оба выражения. Таким образом, все записи, которые оценили true для левого выражения, будут возвращены вместе со всеми записями, которые оценили true в правом выражении. Например:
SELECT * FROM TABLE1
WHERE COL1 = 'Test' OR Col2 = 'Data'
Это вернет все записи, где COL1 - «Тест», а также любую запись, где Col2 - «Данные»
В приведенном выше примере я изменил условное выражение Column2 следующим образом:
AND(Column2 LIKE ISNULL(@Param2, '') + '%')
Внезапно я вернул 0 строк.
Я ошибался в том, что ИЛИ только оценивает выражения, пока не найдет ИСТИННЫЙ результат, или есть условие, которое заставит 2 разных вернуть разные результаты?