Fix “At least one of the arguments to COALESCE must be an expression that is not the NULL constant” in SQL Server

In SQL Server, if you’re getting error Msg 4127 that reads “At least one of the arguments to COALESCE must be an expression that is not the NULL constant”, it’s probably because all of your arguments to the COALESCE() expression are the NULL constant.

To fix this issue, make sure at least one argument is not the NULL constant.

Example of Error

Here’s an example of code that produces this error:

SELECT COALESCE( null, null );

We get this:

Msg 4127, Level 16, State 1, Line 1
At least one of the arguments to COALESCE must be an expression that is not the NULL constant.

In this case, all arguments were the NULL constant, and so an error was returned.

Solution

The solution is easy. All we need to do is make sure at least one argument is not the NULL constant:

SELECT COALESCE(null, 'Cat', 'Dog');

Result:

Cat

In this case, Cat was the first non-NULL argument, and so COALESCE() returned that value.

As seen here, it’s OK to include the NULL constant as an argument, as long as there’s also at least one other argument that is not the NULL constant.

NULL Expressions & Database Columns

Note that the NULL constant is not the same as an expression that results in NULL. And it’s not the same as a database column that contains NULL.

For example, if all arguments reference database columns, and those database columns are NULL, then we don’t get the error.

Suppose we run the following query:

SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Result:

CustomerId  CustomerCategoryId
----------- ------------------
NULL        NULL

Both columns contain NULL values.

So if we pass both columns to COALESCE(), we get a result of NULL:

SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Result:

NULL

The same is true if we replace one of the columns with the NULL constant:

SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;

Result:

NULL

So it’s only when all arguments are the NULL constant that we get an error.