Logical Operators

Logical Operators

OperatorDescriptionExample
`AND`True if both values are truea AND b
`OR`True if either value is truea OR b
`NOT`True if the value is falseNOT a

Effect of NULL on Logical Operators

The result of an `AND` comparison may be `NULL` if one or both sides of the expression are `NULL`. If at least one side of an `AND` operator is `FALSE` the expression evaluates to `FALSE`:

``````SELECT CAST(null AS boolean) AND true; -- null

SELECT CAST(null AS boolean) AND false; -- false

SELECT CAST(null AS boolean) AND CAST(null AS boolean); -- null
``````

The result of an `OR` comparison may be `NULL` if one or both sides of the expression are `NULL`. If at least one side of an `OR` operator is `TRUE` the expression evaluates to `TRUE`:

``````SELECT CAST(null AS boolean) OR CAST(null AS boolean); -- null

SELECT CAST(null AS boolean) OR false; -- null

SELECT CAST(null AS boolean) OR true; -- true
``````

The following truth table demonstrates the handling of `NULL` in `AND` and `OR`:

aba AND ba OR b
`TRUE``TRUE``TRUE``TRUE`
`TRUE``FALSE``FALSE``TRUE`
`TRUE``NULL``NULL``TRUE`
`FALSE``TRUE``FALSE``TRUE`
`FALSE``FALSE``FALSE``FALSE`
`FALSE``NULL``FALSE``NULL`
`NULL``TRUE``NULL``TRUE`
`NULL``FALSE``FALSE``NULL`
`NULL``NULL``NULL``NULL`

The logical complement of `NULL` is `NULL` as shown in the following example:

``````SELECT NOT CAST(null AS boolean); -- null
``````

The following truth table demonstrates the handling of `NULL` in `NOT`:

aNOT a
`TRUE``FALSE`
`FALSE``TRUE`
`NULL``NULL`