DISTINCT NULL在SQL Server中返回单个NULL

时间:2019-05-17 11:43:30

标签: sql-server

在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

2 个答案:

答案 0 :(得分:32)

the documentation中明确要求进行DISTINCT比较的NULL处理。摘录:

  

DISTINCT

     

指定仅唯一的行可以出现在结果集中。   就DISTINCT而言,将空值视为相等   关键字。

答案 1 :(得分:1)

它不仅在文档中被提及,而且是另一种平等测试。未知等于未知吗?谁知道,也许是,也许没有。但这就是为什么Distinct只返回1的原因。如果它返回2个不同的值,那就意味着未知数是不同的。至少存在一个未知值,因此应该在列表中,该值是否与其他任何未知值都不同,这是未知的。

相交的空值也相等。

Select 1
Where exists (select null intersect select null)