我理解为什么null + 1
or ( 1 + null
) 返回null
:null
表示“未知值”,如果一个值是未知的,它的后继也是未知的。大多数其他涉及 null 的操作也是如此。[*]
但是,我不明白为什么会发生以下情况:
SELECT SUM(someNotNullableIntegerField) FROM someTable WHERE 1=0
此查询返回null
. 为什么?这里不涉及未知值!WHERE 子句返回零条记录,空值集的总和为0
.[**] 请注意,该集不是unknown,而是已知为 empty。
我知道我可以使用ISNULL
or来解决这种行为COALESCE
,但我试图理解为什么选择了这种对我来说似乎违反直觉的行为。
关于为什么这有意义的任何见解?
[*] 有一些值得注意的例外,例如null OR true
,其中显然true
是正确的结果,因为未知值根本无关紧要。
[**] 就像一组空值的乘积是1
. 从数学上讲,如果我将 $(Z, +)$ 扩展为 $(Z union {null}, +)$,标识元素的明显选择仍然是0
, not null
, 因为x + 0 = x
but x + null = null
。