当 ANSI_NULL 设置为 ON 时,为什么 ISO 标准对 NULL 也是如此?

问题描述 投票:0回答:1

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值没有数据类型吗?或者其他什么原因。我想一定有什么原因。

sql-server
1个回答
1
投票

当 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

© www.soinside.com 2019 - 2024. All rights reserved.