Understanding NULL Values in SQL

Learn to Code Today!

Experience personalized, AI-driven learning for coding and data skills. Join millions of users mastering new tech skills and accelerating their career with Enki.
Get started

What are NULL Values and Why They Matter

What is NULL in SQL?

NULL in SQL is a special marker used to indicate that a data value does not exist in the database.

This distinction is important for understanding the integrity and behavior of database queries. Unlike a zero value, which indicates a known absence, or an empty string, which represents a present but empty value, NULL signifies the absence of any data value.

Handling NULL Values in SQL Operations

Proper handling of NULL values is crucial when performing various database operations such as comparisons, sorting, and aggregations. Using standard arithmetic comparisons with NULL can lead to unexpected results because NULL is not a value but a marker.

This is why SQL operators like IS NULL and IS NOT NULL exist to perform these specific checks. The MySQL documentation emphasizes that these operators help in accurately querying and manipulating data involving NULL values.

To visualize this, consider the following example:

In this scenario, the query retrieves all employees whose bonus value is unknown. Using bonus = NULL would not work as intended because NULL cannot be compared using standard equality operators.

Impact of NULL on Aggregate Functions

Understanding how NULL values impact aggregate functions like COUNT, SUM, and AVG is fundamental. NULL values are typically ignored in these operations, which can influence the outcomes of your data analysis.

For instance, the Modern SQL guide explains that the COUNT function excludes NULL values when counting non-null values in a column.

Here's an example:

In the result of this query, if bonus includes NULL values, they won't be counted in the COUNT or included in the summation and average. This behavior ensures that only actual values are considered in calculations, preventing misleading results.

NULL Values, Indexing, and Data Integrity

NULL values also play a critical role in database indexing and data integrity. Consider columns meant to be keys or indexed: defining these columns with NOT NULL constraints avoids introducing NULLs, which can lead to ambiguous results or inefficient index look-ups.

The MySQL documentation also points out that NULL values can complicate the indexing process.

Distinction between NULL, Empty Strings, and Zero

In SQL, it’s crucial to differentiate between NULL, empty strings, and zero:

To illustrate, consider the following:

This query evaluates to true for columns with empty strings but false for columns with NULL or zero values.

Additionally, aggregate functions like COUNT(), SUM(), and AVG() behave differently when NULL values are present. COUNT(column) would exclude NULL values, which could easily lead to misinterpreted data.

Comparing NULL Values

The Unique Logic Behind NULL in SQL

In SQL, NULL is handled using a unique system known as three-valued logic (3VL). This approach extends traditional Boolean logic to accommodate the peculiarities of NULL, incorporating TRUE, FALSE, and UNKNOWN values.

When working with NULL, this three-valued logic becomes essential, as comparisons involving NULL do not behave as one might initially expect.

For instance, consider how NULL behaves in comparisons.

Any comparison with NULL, such as NULL = 5 or NULL <> 5, results in UNKNOWN. This is due to the inherent nature of NULL being an unknown value—it lacks definitiveness.

Consequently, SQL provides specific operators like IS NULL and IS NOT NULL to check for NULL values accurately.

Here's a practical example:

This query will return no rows because salary = NULL yields UNKNOWN. Instead, the correct approach is to use:

Best Practices for Checking NULL Values

Avoiding Direct Comparisons with Standard Operators

It's crucial to avoid using standard operators, such as =, , in direct comparisons with NULL values because these comparisons result in UNKNOWN. This can unexpectedly exclude rows with NULL values from your query results.

Using COALESCE to Substitute NULL Values

When working with SQL, handling NULL values can be tricky. Fortunately, the COALESCE function provides a reliable method to substitute NULL values with more meaningful defaults. This function returns the first non-NULL value among its arguments, offering a simple yet powerful way to manage NULLs in your data.

Consider the following example:

In this query, COALESCE ensures that any NULL salary is treated as 0. This approach is particularly useful for computing averages, totals, or generating reports where NULL values might otherwise disrupt calculations.

Practical Example: Counting Non-NULL Values

Counting non-NULL values in a column is a common requirement. Using the IS NOT NULL operator ensures that only rows containing actual data are included in the count, yielding accurate results. Here's a practical illustration:

SELECT COUNT(*) FROM table_name WHERE column_name IS NOT NULL;

This query counts all non-NULL entries in the specified column. For instance:

This query returns the count of employees with an email address, effectively ignoring any rows where the email field is NULL (W3Schools).

Through these examples and best practices, you'll find that managing NULL values in SQL is not only manageable but also straightforward with the right tools and functions. Embracing functions like COALESCE, IFNULL, NVL, and ISNULL ensures that your queries are both robust and reliable, facilitating smoother data operations and more accurate results.

Example of Aggregate Functions

Handling NULLs correctly in aggregation ensures data integrity:

In these examples, COUNT(price) excludes rows with NULL discounts, and SUM(salary) sums only rows with non-NULL bonuses.

Handling NULLs in GROUP BY Operations

When grouping data, NULLs are treated as equivalent to each other. This means all rows with NULLs in the grouped column are aggregated into a single group.

In this query, employees without an assigned department (NULL department) are counted collectively in the NULL group. This behavior is essential to anticipate when summarizing data (Modern SQL).

Enhance Your SQL Skills with Enki's Courses

If you're interested in mastering SQL, then you should [sign up for Enki’s interactive SQL courses](https://learn.enki.com/join).

Enki comes with a cutting-edge AI mentor to guide you every step of the way! You'll get instant feedback and personalized help to overcome any obstacles you encounter. Dive in and experience how our AI-powered support makes learning SQL both engaging and effective!

Cătălin Buruiană

Lead Engineer

Lead engineer @Enki; SQL Mentor; AI/CV enthusiast

https://uk.linkedin.com/in/loopiezlol

About Enki

  • AI-powered, customized 1:1 coaching
  • Fully customized to team needs
  • Pay only for active learners and results

More articles