Answers:
布尔逻辑-或三值逻辑
x NOT IN (1, 2, NULL)
是相同的 NOT (x = 1 OR x = 2 OR x = NULL)
x <> 1 AND x <> 2 AND x <> NULL
true AND true AND unknown
** 相同unknown
**false
本例相同,因为它不会通过WHERE
条件**现在,这就是为什么人们使用EXISTS
+ NOT EXISTS
而不是IN
+的原因NOT IN
。另请参阅有关指标的使用不是一个逻辑更多
**注意:unknown
与条件false
表达式中的末尾相同WHERE
。
在对表达式求值时,它是未知的。
有关原因,请参见下面的@kgrittn评论
NULL NOT IN (some_subquery)
不应该返回外排除如果some_subquery
不返回任何行。这就是为什么当两列都为Null时执行计划会变得更加昂贵的原因。SQL Server示例
x <> NULL
解析为FALSE
,则希望NOT (x <> NULL)
评估为TRUE
,但不会。 两者都评估为UNKNOWN
。诀窍是只有在WHERE
子句(如果存在)求和时才选择行TRUE
-如果子句求值为FALSE
或,则省略行UNKNOWN
。这种行为(通常,NOT IN
尤其是谓词)是SQL标准规定的。