Skip to main content
NULL is the term used to represent a missing value. A NULL value in a table is a value in a field that appears to be blank. A field with a NULL value is a field with no value. This page summarizes how NULL values are handled in CockroachDB SQL. Each topic is demonstrated via the . When using the built-in client, NULL values are displayed using the word NULL. This distinguishes them from a character field that contains an empty string ("").

NULLs and simple comparisons

Any simple comparison between a value and NULL results in NULL. The remaining cases are described in the next section. This behavior is consistent with PostgreSQL as well as all other major RDBMS’s.
Use the IS NULL or IS NOT NULL clauses when checking for NULL values.

NULLs and conditional operators

The (including IF, COALESCE, IFNULL) only evaluate some operands depending on the value of a condition operand, so their result is not always NULL depending on the given operands. For example, COALESCE(1, NULL) will always return 1 even though the second operand is NULL.

NULLs and ternary logic

AND, OR and IS implement ternary logic, as follows.
ExpressionResult
FALSE AND FALSEFALSE
FALSE AND TRUEFALSE
FALSE AND NULLFALSE
TRUE AND FALSEFALSE
TRUE AND TRUETRUE
TRUE AND NULLNULL
NULL AND FALSEFALSE
NULL AND TRUENULL
NULL AND NULLNULL
ExpressionResult
FALSE OR FALSEFALSE
FALSE OR TRUETRUE
FALSE OR NULLNULL
TRUE OR FALSETRUE
TRUE OR TRUETRUE
TRUE OR NULLTRUE
NULL OR FALSENULL
NULL OR TRUETRUE
NULL OR NULLNULL
ExpressionResult
FALSE IS FALSETRUE
FALSE IS TRUEFALSE
FALSE IS NULLFALSE
TRUE IS FALSEFALSE
TRUE IS TRUETRUE
TRUE IS NULLFALSE
NULL IS FALSEFALSE
NULL IS TRUEFALSE
NULL IS NULLTRUE

NULLs and arithmetic

Arithmetic operations involving a NULL value will yield a NULL result.

NULLs and aggregate functions

Aggregate are those that operate on a set of rows and return a single value. The example data has been repeated here to make it easier to understand the results.
Note the following:
  • NULL values are not included in the COUNT() of a column. COUNT(*) returns 7 while COUNT(b) returns 4.
  • NULL values are not considered as high or low values in MIN() or MAX().
  • AVG(b) returns SUM(b)/COUNT(b), which is different than AVG(*) as NULL values are not considered in the COUNT(b) of rows. See NULLs as Other Values for more details.

NULL as a distinct value

NULL values are considered distinct from other values and are included in the list of distinct values from a column.
However, counting the number of distinct values excludes NULLs, which is consistent with the COUNT() function.

NULLs as other values

In some cases, you may want to include NULL values in arithmetic or aggregate function calculations. To do so, use the IFNULL() function to substitute a value for NULL during calculations. For example, let’s say you want to calculate the average value of column b as being the SUM() of all numbers in b divided by the total number of rows, regardless of whether b’s value is NULL. In this case, you would use AVG(IFNULL(b, 0)), where IFNULL(b, 0) substitutes a value of zero (0) for NULLs during the calculation.

NULLs and set operations

NULL values are considered as part of a UNION .

NULLs and sorting

When containing NULL values, CockroachDB sorts NULL values first with ASC and last with DESC. This differs from PostgreSQL, which sorts NULL values last with ASC and first with DESC. Use the NULLS FIRST and NULLS LAST options of the to change where NULL values appear in the sort order.

NULLs and unique constraints

NULL values are not considered unique. Therefore, if a table has a UNIQUE constraint on one or more columns that are optional (nullable), it is possible to insert multiple rows with NULL values in those columns, as shown in the example below.

NULLs and CHECK Constraints

A expression that evaluates to NULL is considered to pass, allowing for concise expressions like discount < price without worrying about adding OR discount IS NULL clauses. When non-null validation is desired, the usual NOT NULL constraint can be used alongside a CHECK constraint.

NULLs and concatenation with other types

Concatenation between a non-NULL value and a NULL value results in a NULL value.
In CockroachDB v20.2 and earlier, for all values other than , concatenation between a non-NULL value and a NULL value results in an of the non-NULL value’s type. To return an ARRAY of a specific type from a NULL concatenation in CockroachDB v21.1 and later, the NULL value to an ARRAY.
For example:

Known limitations

  • By default, CockroachDB orders NULLs before all other values. For compatibility with PostgreSQL, the null_ordered_last was added, which changes the default to order NULL values after all other values. This works in most cases, due to some transformations CockroachDB makes in the optimizer to add extra ordering columns. However, it does not work when the ordering column is a tuple.