当
ANSI_NULL
设置为 ON
...
SELECT 1 WHERE NULL = NULL
...不返回 (0) 行。
还有...
SELECT 1 WHERE NULL IS NULL
...返回一 (1) 行。
我理解上述查询返回其返回内容的原因。但我很好奇为什么会有这样的规定。
为什么根据ISO标准,
NULL = NULL
是UNKNOWN
而不是TRUE
?
为什么
NULL = NULL gives TRUE
不被采纳为ISO标准?
是因为NULL值没有数据类型吗?或者其他什么原因。我想一定有什么原因。
当 SET ANSI_NULLS 为 OFF 时,等于 (=) 和不等于 (<>) 比较运算符不 遵循 ISO 标准。
https://learn.microsoft.com/en-us/sql/t-sql/statements/set-ansi-nulls-transact-sql
如果 ANSI_NULLS 为 ON,您在问题中所描述的正是您所期望的
适用于 SQL 中 NULL 的一般标准是:您无法确定 NULL 的值,因此您也无法知道它是否等于任何值(因为您无法确定谓词的一侧)。如果您无法确定 NULL 是否等于任何值,那么您也无法知道它是否不相等。
这就是为什么 SQL 提供了处理 NULL 的特殊方法:
选择 1,其中 NULL IS NULL
选择 1,其中 NULL IS NOT NULL