19 That's a new one for me. If I read that correctly the grammar defines three predicates solely for use with the boolean datatype IS TRUE, IS FALSE, IS UNKNOWN. These differ from their equality counterparts in that they only evaluate to True or False. Never to Unknown. i.e. UNKNOWN = TRUE would evaluate to UNKNOWN but UNKNOWN IS TRUE evaluates to False. The full truth tables for IS and = are below. +---------+-------+-------+---------+ | IS | TRUE | FALSE | UNKNOWN | +---------+-------+-------+---------+ | TRUE | TRUE | FALSE | FALSE | | FALSE | FALSE | TRUE | FALSE | | UNKNOWN | FALSE | FALSE | TRUE | +---------+-------+-------+---------+ As opposed to +---------+---------+---------+---------+ | = | TRUE | FALSE | UNKNOWN | +---------+---------+---------+---------+ | TRUE | TRUE | FALSE | UNKNOWN | | FALSE | FALSE | TRUE | UNKNOWN | | UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | +---------+---------+---------+---------+ share improve this answer edited Mar 22 '12 at 16:31 answered Mar 22 '12 at 15:57 Martin Smith 384k7171 gold badges644644 silver badges754754 bronze badges Note that the operators are 'IS TRUE', 'IS FALSE', 'IS NULL' and 'IS UNKNOWN'. They are unary operators, evaluating the LHS expression against the RHS condition. The IS table has to be read as 'operator across the top, operand down the side'; UNKNOWN IS UNKNOWN evaluates to TRUE. Also beware that the LHS can be a 'row type' (probably not the correct technical term), and then the evaluation goes over each of the items in the LHS. Also, the operators can be negated 'IS NOT NULL', 'IS NOT TRUE', 'IS NOT FALSE', 'IS NOT UNKNOWN'. That can lead to major headaches. (Cont'd) – Jonathan Leffler Mar 22 '12 at 17:07 (Cont'd): IIRC, with a row, 'row IS NOT NULL' and 'NOT (row IS NULL)' are not the same answer, necessarily. I think the difference is that 'NOT (row IS NULL)' evaluates to true if some column is not null, but 'row IS NOT NULL' evaluates to true only if all columns are not null. For a single value in the 'row', these are the same; for multiple values, they are not necessarily the same. – Jonathan Leffler Mar 22 '12 at 17:12 @JonathanLeffler The standards (2003 and 2011) use the term "the IS boolean operator". If they were independent unary operators, wouldn't they use plural? See section 6.34 on printed page number 281. – Janus Troelsen Mar 23 '12 at 0:57 @JonathanLeffler Also see section 8.7 , table 14 (printed page 398) where it seems that R IS NULL, NOT R IS NULL, R IS NOT NULL, NOT R IS NOT NULL are the only special cases, which means that IS NOT TRUE and the like would be interpreted not by (special) semantics, but by the semantics, which would seem to make IS NOT UNKNOWN equal to IS UNKNOWN (as page 281 notes in "General Rules" bullet 2). – Janus Troelsen Mar 23 '12 at 1:09 @JonathanLeffler None of the truth tables in the standard are asymmetric, and therefore do not support your claim about significant argument order (except in cases where the order obviously matters because it's not the operator anymore). – Janus Troelsen Mar 23 '12 at 1:10 show 1 more comment 4 As the above poster said, null = null is not correct. It will return NULL(false) For null comparison you must use IS NULL or IS NOT NULL. share improve this answer edited Sep 23 '16 at 13:00 AlG 12.3k44 gold badges3737 silver badges4848 bronze badges answered Mar 22 '12 at 15:10 Chris 34722 silver badges1010 bronze badges It will return NULL(false) is not a valid statement. NULL !== FALSE, NULL !== TRUE, NULL !== NULL. It is just undefined. – Fr0zenFyr Oct 7 '17 at 12:27