是否在SQL WHERE子句中对布尔表达式进行短路求值 ?
例如:
SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key)
如果 @key IS NULL的 计算结果为true,则 @key不是NOT AND @key = t.Key的 计算结果吗?
如果否,为什么不呢?
如果是,是否可以保证?它是ANSI SQL的一部分还是特定于数据库的?
如果是特定于数据库的SqlServer?甲骨文?MySQL的?
ANSI SQL草稿2003 5WD-01-Framework-2003-09.pdf
6.3.3.3规则评估顺序 […] 如果优先级不是由格式或括号确定的,则通常从左到右执行表达式的有效评估。但是, 取决于 表达式是否实际上是从左到右求值,这 取决于实现 ,特别是在操作数或运算符可能导致条件升高 或是否可以在不完全评估表达式的所有部分的情况下确定表达式的结果时。
6.3.3.3规则评估顺序
[…]
如果优先级不是由格式或括号确定的,则通常从左到右执行表达式的有效评估。但是, 取决于 表达式是否实际上是从左到右求值,这 取决于实现 ,特别是在操作数或运算符可能导致条件升高 或是否可以在不完全评估表达式的所有部分的情况下确定表达式的结果时。