ISNULL 函数和 COALESCE 表达式具有相似的用途,但是行为可能不同。

    1、因为 ISNULL 是函数,它只能被计算一次。 如上所述,可以多次计算 COALESCE 表达式的输入值。

    2、确定结果表达式的数据类型方式不同。 ISNULL 使用第一个参数的数据类型,COALESCE 则遵循 CASE 表达式规则并返回具有最高优先级的值的数据类型。

    3、结果表达式是否可为 NULL 对于 ISNULL 和 COALESCE 是不同的。 ISNULL 返回值始终被视为不可为 NULL(假定返回值不可为 null),而具有非 null 参数的 COALESCE 可以为 NULL。 因此表达式 ISNULL(NULL, 1) 和 COALESCE(NULL, 1) 尽管是等效的,但是在结果是否为 null 方面是不同的。 如果您正在计算列中使用这些表达式、创建键约束或生成标量 UDF 确定性的返回值以便可以编入索引,可能得到不同结果

    4、ISNULL 和 COALESCE 的验证也不同。 例如,ISNULL 的 NULL 值转换为int而对于联合,你必须提供一种数据类型。

    5、ISNULL 只取 2 个参数而 COALESCE 可取不同数目的参数。


ISNULL:使用指定的替换值替换 NULL

COALESCE:按顺序计算变量并返回最初不等于 NULL 的第一个表达式的当前值。


ISNULL


COALESCE

表达式 :COALESCE ( expression [ ,...n ] )