我一直在优化查询,遇到了一个让我质疑我一直使用 SQL 的 OR 运算符的情况。(SQL Server 2000 也是)
我有一个查询,其中条件 (WHERE) 子句看起来像这样:
WHERE (Column1 = @Param1 or Column1 LIKE @Param1 + '%')
AND (@Param2 = '' OR Column2 = @Param2 OR Column2 LIKE @Param2 + '%')
现在,我一直理解 SQL 中的 OR 评估了这两个表达式。因此,所有对左侧表达式评估为 true 的记录将与所有在右侧表达式评估为 true 的记录一起返回。例如:
SELECT * FROM TABLE1
WHERE COL1 = 'Test' OR Col2 = 'Data'
这将返回 COL1 为“测试”的所有记录以及 Col2 为“数据”的任何记录
在上面的示例中,我将 Column2 条件修改为以下内容:
AND(Column2 LIKE ISNULL(@Param2, '') + '%')
突然间,我返回了 0 行。
我是否误认为 OR 只评估表达式,直到找到 TRUE 结果,或者是否存在会导致 2 个不同返回不同结果的条件?