为什么NULL在SQL中被认为是一种特殊情况?

为什么NULL在SQL中被认为是一种特殊情况?,sql,Sql,假设以下数据库表: 客户 身份证件 外部的 名字 姓氏 4c8e49a6-b148-4125-9352-c2effda744b8 无效的 艾伦 图灵 9bb67137-07cf-413b-8f7e-d710a9c52c19 无效的 比尔 盖茨 7510fe8e-a976-4258-bf5a-a314373f6743 “abc” 查尔斯 巴贝奇 62222be0-5e85-4333-9683-7b2de03073c5 “xyz” 丹尼斯 里奇 这就是NULL的定义方式。时期它在语义上表示“未知值”

假设以下数据库表:

客户

身份证件 外部的 名字 姓氏 4c8e49a6-b148-4125-9352-c2effda744b8 无效的 艾伦 图灵 9bb67137-07cf-413b-8f7e-d710a9c52c19 无效的 比尔 盖茨 7510fe8e-a976-4258-bf5a-a314373f6743 “abc” 查尔斯 巴贝奇 62222be0-5e85-4333-9683-7b2de03073c5 “xyz” 丹尼斯 里奇
这就是
NULL
的定义方式。时期它在语义上表示“未知值”,而不是“缺失值”。所以
NULL!='abc'
返回
NULL
,因为该值未知。和
,其中
仅返回显式计算为“true”的表达式

您真正的问题是为什么SQL Server不支持
NULL
安全比较运算符。因此,定义
NULL
行为的相同标准也定义了
,不同于
做你想做的事:

where externalId is distinct from 'abc'

问题是为什么SQL Server不支持这一点。

这就是
NULL
的定义方式。时期它在语义上表示“未知值”,而不是“缺失值”。所以
NULL!='abc'
返回
NULL
,因为该值未知。和
,其中
仅返回显式计算为“true”的表达式

您真正的问题是为什么SQL Server不支持
NULL
安全比较运算符。因此,定义
NULL
行为的相同标准也定义了
,不同于
做你想做的事:

where externalId is distinct from 'abc'

问题是为什么SQL Server不支持这种情况。

没有“特殊情况”。这就是
NULL
的定义方式以及它一直以来的定义方式。您可以尝试
NULL不同于“abc”
并且
NULL不同于“abc”
没有“特殊情况”。这就是
NULL
的定义方式以及它一直以来的定义方式。您可以尝试
NULL与“abc”
不同,
NULL与“abc”
没有区别,“……为什么SQL Server不支持它”?@MatthewLayton。曾几何时,答案是“Sybase不支持它”,因为这是SQL Server的代码库。然而,那是在
NULL
之前-安全比较在标准中(我认为)。从那时起,我只是假设Microsoft没有收到足够的请求来支持此功能。@MatthewLayton-因为有很多好的想法被要求,那么对于“…为什么SQL Server不支持此功能”?@MatthewLayton。曾几何时,答案是“Sybase不支持它”,因为这是SQL Server的代码库。然而,那是在
NULL
之前-安全比较在标准中(我认为)。从那时起,我只是假设微软没有收到足够的请求来支持这个功能。@MatthewLayton-因为有很多好的想法被要求,然后