• I think this difference in behavior may have something to do with the fact that the construction we're all so used to in SQL Server

    SELECT (some thing or expression)

    is really a short hand version of

    SELECT (some thing or expression)

    FROM (some table)

    In Oracle and DB2, you can't write

    SELECT (something)

    You have to specify the FROM clause - which I believe is consistent with the language definition. Oracle gets around this by providing DUAL. DB2 shops often create their own version.

    Anyway, I think that this difference in behavior is due to the fact that 1. ISNULL is old, proprietary, and non-standard, and 2. SELECT NULL without a FROM clause is really shorthand for SELECT NULL FROM SomeConvenientTable.

    Personally, I always use COALESCE. It is standard SQL, and it is more flexible than ISNULL. ISNULL can do nothing that COALESCE can't do, and COALESCE can do things that ISNULL can't. So... COALESCE, always.