在Sql Server中,NULL不等于NULL。(Why does NULL = NULL evaluate to false in SQL server) 那么为什么下面的代码返回单个NULL。
CREATE TABLE #TEMP1
(ID INT)
INSERT INTO #TEMP1
SELECT NULL
UNION ALL
SELECT NULL
SELECT DISTINCT ID FROM #TEMP1
DROP TABLE #TEMP1
ID
------
NULL
我期望
ID
------
NULL
NULL
答案 0 :(得分:32)
在the documentation中明确要求进行DISTINCT
比较的NULL处理。摘录:
DISTINCT
指定仅唯一的行可以出现在结果集中。 就DISTINCT而言,将空值视为相等 关键字。
答案 1 :(得分:1)
它不仅在文档中被提及,而且是另一种平等测试。未知等于未知吗?谁知道,也许是,也许没有。但这就是为什么Distinct只返回1的原因。如果它返回2个不同的值,那就意味着未知数是不同的。至少存在一个未知值,因此应该在列表中,该值是否与其他任何未知值都不同,这是未知的。
相交的空值也相等。
Select 1
Where exists (select null intersect select null)