A complex predicate combines any number of predicates with the
Boolean operators AND, OR, and NOT. Boolean operators are also
called logical operators.
complex-predicate =
-+-+--------+-+--> complex-predicate -+---+----------->
| +-> NOT -+ +--> predicate ---------+ +-> AND -+-+
| +-> OR --+ |
+-------------------------<-------------------------+
When nesting predicates, you must enclose them in parentheses.
SQL evaluates parts of a complex predicate in this order:
1. Predicates enclosed in parentheses
If there are nested predicates in parentheses, the innermost
predicate is evaluated first.
2. Predicates preceded by NOT
3. Predicates combined with AND
4. Predicates combined with OR
The following tables summarize how SQL evaluates predicates
combined with Boolean operators. Such tables are often called
truth tables.
Table 4 Boolean Operator: AND
A B A AND B
True False False
True True True
False False False
False True False
True Unknown Unknown
False Unknown False
Unknown True Unknown
Unknown False False
Unknown Unknown Unknown
Table 5 Boolean Operator: OR
A B A OR B
True False True
True True True
False False False
False True True
True Unknown True
False Unknown Unknown
Unknown True True
Unknown False Unknown
Unknown Unknown Unknown
Table 6 Boolean Operator: NOT
A NOT A
True False
False True
Unknown Unknown
NOTE
The fact that NOT A is evaluated as unknown when A is
unknown can be confusing in queries that refer to tables
with null values. It means that a NOT predicate is not
necessarily evaluated as true for all rows of a column for
which the same predicate without NOT is evaluated as false.
In other words, the result of a query that contains NOT A
is not necessarily the complement of the result of the same
query that contains only A.