与当断言是假的集合体返回一个非空的结果集T-SQL查询

与当断言是假的集合体返回一个非空的结果集T-SQL查询

问题描述:

请参阅下面的查询:与当断言是假的集合体返回一个非空的结果集T-SQL查询

SELECT SUM(n) AS SUMVAL FROM (values(3),(4)) AS tbl(n) WHERE 1=0

因为我提供了一个断言那是假的,我会假设它返回一个空结果集(0行)。但它返回一个NULL的行。这是一个错误吗?或者是否有这种行为的有效解释。

如果我删除聚合函数,我得到一个空的结果如预期设置:

SELECT n AS VAL FROM (values(3),(4)) AS tbl(n) WHERE 1=0 

而只是要清楚,如果我删除了虚假的断言,那么查询将返回值2行3和4列“VAL”

SELECT n AS VAL FROM (values(3),(4)) AS tbl(n) 

但如果我使用聚合函数与GROUP BY子句中,如下图所示的查询,我得到预期的结果(空行集)

SELECT id, SUM(n) AS SUMVAL FROM (values(1,3.0),(2,4.0)) AS tbl(id,n) WHERE 1=0 GROUP BY id 

SELECT SUM(n)作为SUMVAL FROM(值(3),(4))AS TBL(N),其中1 = 0

如上仅选择所聚集的值返回的情况下谓词为假时为NULL,因为我们没有任何满足谓词条件的行。

SELECT ID,SUM(n)作为SUMVAL FROM(值(1,3.0),(2,4.0))AS TBL(ID,N) WHERE 1 = 0 GROUP BY ID

但是在上面它会返回空结果集,因为我们试图根据一个甚至不存在的特定项目(在您的示例假谓词中)来总结值。这是sql server的正常行为