Answers:
布尔逻辑-或三值逻辑
x NOT IN (1, 2, NULL) 是相同的 NOT (x = 1 OR x = 2 OR x = NULL)x <> 1 AND x <> 2 AND x <> NULLtrue 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标准规定的。