Get the essential data observability guide
Download this guide to learn:
What is data observability?
4 pillars of data observability
How to evaluate platforms
Common mistakes to avoid
The ROI of data observability
Unlock now
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Sign up for a free data observability workshop today.
Assess your company's data health and learn how to start monitoring your entire data stack.
Book free workshop
Sign up for news, updates, and events
Subscribe for free
Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
Getting started with Data Observability Guide

Make a plan to implement data observability across your company’s entire data stack

Download for free
Book a data observability workshop with an expert.

Assess your company's data health and learn how to start monitoring your entire data stack.

Book free workshop

NVL vs. IFNULL in Snowflake: Which to choose to tame NULL values?

NVL and IFNULL in Snowflake function very similarly—with some subtle differences. Read on to learn how they're similar, how they're different, and when to use each one.

and
March 19, 2025
Blog Author Image

Writer / Data

March 19, 2025
NVL vs. IFNULL in Snowflake: Which to choose to tame NULL values?

NULL values are the uninvited guests at your data warehouse party. They show up unexpectedly, make calculations awkward, and leave behind a mess of broken dashboards and confused stakeholders.

Snowflake gives us plenty of weapons for getting rid of NULL values, but two of the most commonly used—`NVL` and `IFNULL`—look suspiciously similar. Same syntax, same behavior... so does it actually matter which one you use?

As it turns out, yes—but not for the reasons you might think. Let's unpack these NULL-handling twins and discover which one deserves a spot in your SQL toolkit.

What are NVL and IFNULL?

Both NVL and IFNULL serve the same fundamental purpose: they check if a value is NULL and, if it is, replace it with something else. Think of them as your safety net for when data goes missing.

NVL syntax and behavior

```sql

NVL(expression, replacement_value)

```

NVL takes two arguments:

  • `expression`: The value to check for NULL
  • `replacement_value`: What to use if expression is NULL

If expression isn't NULL, NVL simply returns it as-is. If it is NULL, you get `replacement_value` instead.

Here's a simple example:

```sql

SELECT 

    customer_id,

    NVL(phone_number, 'No phone provided') AS contact_info

FROM customers;

```

IFNULL syntax and behavior

```sql

IFNULL(expression, replacement_value)

```

Look familiar? IFNULL uses the exact same syntax and returns the same results:

```sql

SELECT 

    customer_id,

    IFNULL(phone_number, 'No phone provided') AS contact_info

FROM customers;

```

Both functions will return `phone_number` when it exists and "No phone provided" when it's NULL.

Key differences between NVL and IFNULL

Despite their identical behavior, there are some distinctions worth knowing:

  1. Origin and Compatibility:
    • NVL comes from Oracle's SQL dialect
    • IFNULL originates from MySQL
    • Both are supported in Snowflake for compatibility with different SQL backgrounds
  2. Performance:
    • There's no meaningful performance difference between them in Snowflake
    • Both are optimized equally well by the query engine
  3. Readability:
    • IFNULL's name more clearly describes what it does (IF something is NULL)
    • NVL requires familiarity with Oracle's conventions
  4. Multi-database Development:
    • If you work across different database systems, it's worth noting which function is native to which platform

When to use NVL in Snowflake

You might be wondering when to reach for NVL instead of its IFNULL twin. While their functionality is identical, NVL brings some contextual advantages that make it the better choice in specific situations.

1. Oracle migration projects

If you're migrating from Oracle to Snowflake, sticking with NVL maintains consistency with your original code:

```sql

-- Oracle-compatible code

SELECT 

    order_id, 

    NVL(discount_amount, 0) AS discount

FROM orders;

```

2. Team familiarity

If your team has an Oracle background and is more comfortable with NVL, there's no compelling reason to switch:

```sql

SELECT 

    region,

    NVL(SUM(sales), 0) AS total_sales

FROM sales_data

GROUP BY region;

```

3. Maintaining legacy code

When working with existing codebase that already uses NVL throughout:

```sql

-- Keep consistent with existing code patterns

SELECT 

    date_trunc('month', order_date) AS month,

    NVL(COUNT(DISTINCT customer_id), 0) AS unique_customers

FROM orders

GROUP BY month;

```

When to use IFNULL in Snowflake

Not to be outdone, IFNULL comes with its own compelling use cases that often align with different team compositions and project requirements. Here's where IFNULL might edge out NVL as your function of choice:

1. Self-documenting code

IFNULL more clearly communicates intent to those unfamiliar with Oracle syntax:

```sql

-- More intuitive for SQL beginners

SELECT 

    product_id,

    IFNULL(inventory_count, 0) AS available_stock

FROM products;

```

2. MySQL migration projects

If you're coming from MySQL to Snowflake, IFNULL maintains your team's familiar patterns:

```sql

-- MySQL-compatible code 

SELECT 

    store_id, 

    IFNULL(manager_name, 'Unassigned') AS manager

FROM stores;

```

3. Cross-platform development

If you're developing SQL that needs to work in both Snowflake and MySQL:

```sql

-- Works in both MySQL and Snowflake

SELECT 

    campaign_id, 

    IFNULL(click_through_rate, 0) AS ctr

FROM marketing_campaigns;

```

Pro tips for using NVL and IFNULL

No matter which function you choose, these best practices will help you tame NULL values more effectively:

1. Be consistent across your codebase

Pick one function and stick with it throughout your project. Mixing and matching can confuse team members:

```sql

-- Good: Consistent usage

SELECT 

    IFNULL(first_name, '') || ' ' || IFNULL(last_name, '') AS full_name,

    IFNULL(email, 'No email') AS contact

FROM users;

-- Avoid: Mixed usage

SELECT 

    IFNULL(first_name, '') || ' ' || NVL(last_name, '') AS full_name,

    NVL(email, 'No email') AS contact

FROM users;

```

2. Watch out for data type conversions

Both functions return the data type of the first non-NULL expression they encounter. Be careful when mixing types:

```sql

-- Potential issue: numeric to string conversion

SELECT IFNULL(numeric_column, 'N/A') FROM table;

-- Better approach: explicit conversion

SELECT IFNULL(numeric_column, NULL)::STRING FROM table;

```

3. Use for aggregations to avoid NULL results

NULL values in aggregations can lead to unexpected results. Protect your calculations:

```sql

-- Without IFNULL/NVL, returns NULL if no sales

SELECT AVG(sales_amount) FROM sales WHERE region = 'Northeast';

-- With IFNULL/NVL, returns 0 if no sales

SELECT AVG(IFNULL(sales_amount, 0)) FROM sales WHERE region = 'Northeast';

```

4. Chain for multiple fallbacks

For more complex NULL handling, you can nest calls:

```sql

SELECT 

    customer_id,

    IFNULL(

        primary_phone,

        IFNULL(

            mobile_phone,

            IFNULL(work_phone, 'No contact number')

        )

    ) AS best_contact_number

FROM customers;

```

Though in this case, `COALESCE` would probably be more efficient.

5. Document when defaults are supplied

When using default values in business-critical calculations, consider adding comments:

```sql

SELECT 

    order_id,

    -- Default to 0% discount if NULL to ensure accurate revenue calculations

    price * (1 - IFNULL(discount_rate, 0)) AS final_price

FROM orders;

```

The verdict: Which should you choose?

The truth is, from a technical standpoint, it doesn't matter which one you use in Snowflake. They're functionally identical.

Your decision should be based on:

  1. Existing patterns in your codebase
  2. Team background (Oracle vs MySQL/others)
  3. Readability preferences for your organization

What truly matters is consistency and understanding across your team. Choose one, document your choice, and stick with it.

Beyond NVL and IFNULL: The bigger NULL-handling picture

Remember that Snowflake offers additional NULL-handling functions worth exploring:

  • COALESCE: Takes multiple arguments and returns the first non-NULL value
  • NULLIF: Returns NULL if two expressions are equal, otherwise returns the first expression
  • ZEROIFNULL: Specifically converts NULLs to zeros (useful for numerical calculations)

By mastering these functions alongside NVL and IFNULL, you'll be well-equipped to handle whatever NULL challenges your data throws at you.

In the battle against NULL values, having the right tools makes all the difference. Whether you choose NVL, IFNULL, or another approach, what matters most is that you're proactively addressing these silent troublemakers before they impact your analytics and decision-making.

Looking for more Snowflake tips? Learn how to use DATEDIFF, DATE_TRUNC, IFNULL, COALESCE, and DATEADD.

Table of contents

    Tags

    We’re hard at work helping you improve trust in your data in less time than ever. We promise to send a maximum of 1 update email per week.

    Your email
    Ensure trust in data

    Start monitoring your data in minutes.

    Connect your warehouse and start generating a baseline in less than 10 minutes. Start for free, no credit-card required.