为什么包含空值的多列的Sql Sum返回不正确的结果?

Gar*_*ett 5 sql t-sql sql-server

包含以下值的表:

Column1  Column2
1        NULL
NULL     4
2        NULL
NULL     5
3        6
Run Code Online (Sandbox Code Playgroud)

以下查询:

SELECT 
    SUM([Column1] + [Column2] ) 
FROM [myTable]
Run Code Online (Sandbox Code Playgroud)

返回9它应该返回的值21.为什么?它是如何达到价值的?

我知道可以通过添加ISNULL如下来修正SUM :

SELECT 
    SUM(ISNULL([Column1], 0) + ISNULL([Column2], 0)) 
FROM [myTable]
Run Code Online (Sandbox Code Playgroud)

但我想知道价值背后的逻辑 9

Joh*_*Woo 6

用于COALESCEnull转换为0.(如果你想将空值设为零,那就是它.)

SELECT SUM(COALESCE(column1,0) + COALESCE(column2,0))
FROM table1
Run Code Online (Sandbox Code Playgroud)


Mat*_*all 4

和一个数的和到底是多少null?请注意 的来源9:唯一具有非 nullColumn1和 的行Column2

当然,已经发布了一种可行的解决方案。但是,直接跳到解决方案的乐趣在哪里呢?

(应OP的要求复制pasta)