2017-07-04 49 views
0

当ANSI_NULL设置为ON:当ANSI_NULL设置为ON时,为什么ISO标准为NULL?

SELECT 1 WHERE NULL = NULL返回行

和SELECT 1 WHERE NULL IS NULL返回一行

我理解的原因以上查询返回他们返回的内容。但我很想知道为什么规则如此。为什么根据ISO标准,NULL = NULL是UNKNOWN而不是TRUE?为什么'NULL = NULL给TRUE'不被视为ISO标准?是否因为NULL值没有数据类型?或者其他原因。我认为一定有一些原因。

+3

'NULL'真正意味着“未知',你无法判断某个未知事物是否与其他未知事物相同。 – HoneyBadger

+0

NULL表示我们不知道的东西。所以我们不能用'='来比较一个未知值与另一个值。我们只能说'IS NULL' –

回答

1

当SET ANSI_NULLS为OFF时,等于(=)并且不等于(<>)比较运算符遵循ISO标准。

https://docs.microsoft.com/en-us/sql/t-sql/statements/set-ansi-nulls-transact-sql

您的问题描述的是正是你应该期待什么,如果ANSI_NULLS为ON

适用于SQL NULL的一般标准是,你不能确定NULL值,因此您也无法知道它是否等于任何值(因为您无法确定谓词的一侧)。如果你不能确定NULL是否等于任何东西,那么它也跟着你不知道它是否不相等。

这就是为什么SQL提供了处理NULL特殊的方法:

SELECT 1 WHERE NULL IS NULL
SELECT 1 WHERE NULL IS NOT NULL

相关问题