COALESCE与NULL

Col*_*ett 10 sql t-sql sql-server coalesce

我在一个视图中发现了这个SQL片段,我对它的目的感到困惑(为了简洁起见缩短了实际的SQL):

SELECT
    COALESCE(b.Foo, NULL) AS Foo

FROM a
LEFT JOIN b ON b.aId=a.Id
Run Code Online (Sandbox Code Playgroud)

我想不出与null合并的目的的单一原因而不是仅仅这样做:

SELECT
    b.Foo AS Foo

FROM a
LEFT JOIN b ON b.aId=a.Id
Run Code Online (Sandbox Code Playgroud)

或者至少不要明确地包含NULL:

SELECT
    COALESCE(b.Foo) AS Foo

FROM a
LEFT JOIN b ON b.aId=a.Id
Run Code Online (Sandbox Code Playgroud)

我不知道是谁创作了这个(所以我不能问),是什么时候创作的,或者是为它编写的具体MS SQL Server版本(尽管如此,2008年之前).

有没有合理的理由与NULL合并而不是直接选择列? 我忍不住笑了,把它写成了一个新手的错误,但这让我想知道是否有一些我不知道的"边缘情况".

OMG*_*ies 11

你是对的 - 没有理由使用:

SELECT COALESCE(b.Foo, NULL)
Run Code Online (Sandbox Code Playgroud)

...因为如果b.foo是NULL,你可能只是使用:

SELECT b.foo
Run Code Online (Sandbox Code Playgroud)

...假设您知道该值是否为null.