"Josh Berkus" <[EMAIL PROTECTED]> writes:
> Er... what were you expecting, exactly?

AFAICT, the quoted behavior is correct per the defined behavior of
nullif(), cf 
http://www.ca.postgresql.org/users-lounge/docs/7.1/postgres/functions-conditional.html

        NULLIF(value1, value2)

        The NULLIF function returns NULL if and only if value1 and
        value2 are equal. Otherwise it returns value1.

> Except for IS NULL (and COALESCE, which uses IS NULL) any operation
> involving a NULL is also NULL.

Well, that's not quite the correct reasoning.

NULLIF and COALESCE are both shorthands for CASE expressions, and hence
are capable of returning non-NULL for a NULL input.  It all depends on
how the CASE tests are phrased.  NULLIF is essentially
        CASE WHEN value1 = value2 THEN NULL ELSE value1 END
In the quoted example, "NULL = 5" will yield NULL, which is interpreted
as a FALSE case test, so you get the ELSE case, ie value1, ie NULL.

                        regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to