ARE is a reserved keyword in the SQL standard but never appears as a stand-alone statement. Instead, it functions as an auxiliary verb in predicates that apply to row-value or multi-column constructs. When you need to test a set of columns together—for example, to ensure none of them is NULL or to compare two composite keys—you can use plural predicates whose grammar includes ARE. Although the same logic can often be expressed with AND conditions on individual columns, ARE keeps the query concise and guarantees atomic evaluation of the row value as a single unit.Key contexts1. Row NULL test – (, , …) ARE [NOT] NULL checks whether every element in the row is (or is not) NULL.2. Row distinctness – (, ) ARE [NOT] DISTINCT FROM (, ) provides NULL-safe equality comparison between two row values.3. Some vendor features – IBM Db2, BigQuery, and Firebird surface ARE inside extension clauses such as PERIOD definitions or enforced constraints.Caveats- ARE predicates require parentheses around each row-value expression.- Not every dialect implements ARE even if it parses as a reserved word; MySQL and SQL Server reject the syntax.- When mixing scalar and row comparisons, remember that scalar predicates use IS while row predicates use ARE in strict standard form.
SQL:1992 (row-value comparison predicates)
IS applies to scalar predicates (single values). ARE is used with row-value predicates that involve multiple columns at once.
Yes. You can place an ARE predicate anywhere a boolean condition is allowed, including WHERE, HAVING, and CHECK clauses.
ARE DISTINCT FROM treats two NULLs as equal, unlike the default comparison operator, which returns UNKNOWN when any operand is NULL.
In most engines the planner rewrites ARE predicates into equivalent lower-level operations, so performance impact is negligible. Optimize by indexing the underlying columns as usual.