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