IS NOT NULL is a unary predicate that evaluates whether an expression holds a definite value (i.e., is not the special NULL marker). Because NULL represents unknown or missing information, comparisons using the usual operators (=, <, >, etc.) treat NULL as unknown and return NULL. IS NOT NULL bypasses three-valued logic by explicitly checking for non-NULL, producing a Boolean TRUE or FALSE result. It can appear in SELECT, UPDATE, DELETE, CHECK constraints, JOIN conditions, and CASE expressions. The predicate never matches NULLs, even if they result from calculations, subqueries, or outer joins. It is sargable in most engines, allowing index usage when the underlying column is indexed and defined as NOT NULL. Caveats: data containing empty strings or zero dates are still considered NOT NULL; ANSI padding settings in some systems do not affect NULL evaluation; IS NOT NULL is not a function and therefore takes no parentheses.
expression
(any valid SQL expression or column. Data type) - arbitrary.IS NULL, COALESCE, NULLIF, ISNULL (SQL Server), NVL (Oracle), NOT operator, three-valued logic
SQL-92
= NULL returns UNKNOWN because NULL is not equal to anything, including itself. IS NOT NULL explicitly checks for the absence of NULL and returns TRUE.
Yes. If the expression evaluates to a non-NULL value, IS NOT NULL is TRUE; if it evaluates to NULL, it is FALSE.
Use IS NULL to target rows where the expression is NULL. Combine predicates with OR to retrieve both if needed.
On indexed, NOT NULL columns most engines can satisfy the predicate using the index. On NULL-able columns, a full scan might be required.