- 1 1. Introdução
- 2 2. O que é a função IFNULL?
- 3 3. Exemplos práticos da função IFNULL
- 4 3.5 Coloque valores NULL por último em ORDER BY
- 5 4. Diferenças entre IFNULL e COALESCE
- 6 5. Funções de tratamento de NULL em bancos de dados diferentes do MySQL
- 7 6. Perguntas Frequentes (FAQ)
- 7.1 Q1. Are the IFNULL function and the NVL function the same?
- 7.2 Q2. What is the difference between IFNULL and COALESCE?
- 7.3 Q3. Can IFNULL be used with data types other than numbers?
- 7.4 Q4. Does using IFNULL reduce performance?
- 7.5 Q5. Can you use CASE instead of IFNULL?
- 7.6 Q6. Can IFNULL be used in a WHERE clause?
- 7.7 Summary
- 8 7. Conclusão
1. Introdução
Ao trabalhar com bancos de dados, manipular valores NULL é um ponto crítico.
Em particular, não é incomum que pessoas acostumadas à função NVL do Oracle percebam que NVL não está disponível ao migrar para MySQL.
No MySQL, você pode manipular valores NULL corretamente usando a função IFNULL em vez de NVL.
Este artigo explica como trabalhar com valores NULL no MySQL em detalhes, abordando como usar IFNULL e como ela difere de outras funções de tratamento de NULL.
1.1 O que é um valor NULL?
Em bancos de dados, NULL significa “nenhum valor foi definido”.
Como isso é diferente de “0” ou de uma “string vazia”, não tratá‑lo adequadamente pode levar a erros inesperados ou resultados de consulta incorretos.
Por exemplo, suponha que você tenha dados como os seguintes.
| ID | Name | Age |
|---|---|---|
| 1 | Yamada | 25 |
| 2 | Sato | NULL |
| 3 | Suzuki | 30 |
Nos dados acima, a idade para o ID “2” (Sato) é NULL.
Se você executar cálculos como estão, pode obter erros ou resultados indesejados.
1.2 Como o MySQL trata valores NULL
2. O que é a função IFNULL?
O MySQL fornece a função IFNULL como uma função para substituir valores NULL por outro valor.
Ela desempenha um papel semelhante à função NVL do Oracle.
Ao tratar valores NULL adequadamente, você pode evitar problemas de cálculo causados por dados ausentes e criar consultas SQL mais estáveis.
Vamos analisar mais de perto o uso básico do IFNULL.
2.1 Sintaxe básica do IFNULL
A sintaxe básica da função IFNULL é a seguinte.
IFNULL(expression, fallback_value)
- expression : A coluna ou valor a ser verificado quanto a NULL
- fallback_value : O valor a ser retornado quando a expressão for NULL (se não for NULL, a expressão é retornada como está)
Por exemplo, considere a seguinte instrução SQL.
SELECT IFNULL(NULL, 'Fallback value');
Neste caso, como NULL foi especificado, o resultado torna‑se 'Fallback value'.
| Result |
|---|
| Fallback value |
Por outro lado, se você especificar um valor não NULL, esse valor é retornado como está.
SELECT IFNULL('Hello', 'Fallback value');
| Result |
|---|
| Hello |
2.2 Principais características do IFNULL
A função IFNULL possui as seguintes características.
- Pode converter valores NULL em um valor específico
- Você pode definir um valor padrão alternativo para colunas que podem conter NULL.
- Utiliza uma sintaxe simples
- É mais simples de escrever do que usar uma expressão
CASE.
- É necessário considerar os tipos de dados
- É recomendado que os argumentos do
IFNULLsejam do mesmo tipo de dado.
Por exemplo, o SQL a seguir pode causar um erro.
SELECT IFNULL(100, 'Error');
Motivo: um tipo numérico (100) e um tipo string (‘Error’) foram misturados.
Nesse caso, o valor de fallback também deve ser numérico.
SELECT IFNULL(100, 0);
2.3 Quando você deve usar IFNULL
Aqui estão algumas situações práticas em que IFNULL é útil.
- Definir um valor padrão para NULL
- Por exemplo, se o bônus de um funcionário for NULL, defina‑o como 0.
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Evitar cálculos envolvendo NULL
- Se você calcular com NULL como está, o resultado também se tornará NULL.
- Usar
IFNULLpara evitar NULL permite que o cálculo seja realizado conforme o esperado.SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Tratar NULL corretamente em relatórios e agregações
- Se NULL estiver presente durante a análise, relatórios incorretos podem ser gerados.
- Substituindo NULL por um valor específico usando
IFNULL, você pode processar os dados de forma consistente.
3. Exemplos práticos da função IFNULL
Na seção anterior, explicamos o básico da função IFNULL.
Nesta seção, apresentaremos exemplos concretos de seu uso com dados reais.
3.1 Substituir valores NULL por um valor padrão
Se uma tabela contiver valores NULL, isso pode causar comportamentos indesejados.
Para resolver isso, você pode usar IFNULL para substituir NULL por um valor padrão.
Exemplo: Se o bônus de um funcionário for NULL, defina o valor padrão como 0
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
Dados antes da execução
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | NULL |
| Takahashi | 8000 |
Depois de aplicar IFNULL
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
Substituir NULL por 0 torna a agregação e o processamento relacionado mais suaves.
3.2 Evite cálculos que incluam NULL
No MySQL, o resultado de um cálculo que inclui NULL torna‑se NULL.
Portanto, você precisa usar IFNULL para evitar NULL.
Exemplo: Calcule o total de salário e bônus
SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;
Dados antes da execução
| name | salary | bonus |
|---|---|---|
| Sato | 300000 | 5000 |
| Suzuki | 280000 | NULL |
| Takahashi | 320000 | 8000 |
Depois de aplicar IFNULL
| name | salary | bonus | total_income |
|---|---|---|---|
| Sato | 300000 | 5000 | 305000 |
| Suzuki | 280000 | 0 | 280000 |
| Takahashi | 320000 | 8000 | 328000 |
Se o bônus for NULL, o total (salary + bonus) também se torna NULL,
mas ao aplicar IFNULL, o MySQL trata NULL como 0 e calcula corretamente.
3.3 Substitua NULL por outra string
Você pode definir uma string padrão não apenas para números, mas também quando o valor for NULL.
Exemplo: Mostrar “Não registrado” para usuários sem endereço de e‑mail
SELECT id, name, IFNULL(email, 'Not registered') AS email
FROM users;
Dados antes da execução
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | NULL |
| 3 | Takahashi | takahashi@example.com |
Depois de aplicar IFNULL
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | Not registered |
| 3 | Takahashi | takahashi@example.com |
Se deixado como NULL, o campo aparece em branco, mas IFNULL o torna explícito com “Não registrado”.
3.4 Use IFNULL em uma cláusula WHERE
Você pode usar IFNULL em uma cláusula WHERE para filtrar com base em condições que incluam valores NULL.
Exemplo: Recuperar apenas usuários com valores NULL
SELECT *
FROM users
WHERE IFNULL(email, '') = '';
Este SQL trata email como '' (uma string vazia) quando é NULL, e recupera apenas usuários cujo e‑mail é NULL.
3.5 Coloque valores NULL por último em ORDER BY
Normalmente, ao usar ORDER BY, valores NULL podem aparecer primeiro, mas você pode usar IFNULL para movê‑los para o final.
Exemplo: Colocar linhas com valores NULL por último
SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;
4. Diferenças entre IFNULL e COALESCE
O MySQL fornece várias funções para lidar com valores NULL, e IFNULL e COALESCE são frequentemente comparados.
Ambos substituem valores NULL por alternativas, mas seu uso e comportamento diferem.
Nesta seção, explicamos as diferenças entre IFNULL e COALESCE e como escolher a mais adequada.
4.1 O que é a função COALESCE?
A função COALESCE retorna o primeiro valor não‑NULL entre vários argumentos.
Em outras palavras, enquanto IFNULL seleciona o valor não‑NULL entre dois valores,
COALESCE difere ao selecionar o primeiro valor não‑NULL entre múltiplos candidatos.
Sintaxe
COALESCE(expr1, expr2, ... , exprN)
- Avalia da esquerda para a direita e retorna o primeiro valor não‑NULL
- Retorna NULL se todos os argumentos forem NULL
Exemplo: Substituindo NULL usando COALESCE
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Neste caso, os valores são determinados da seguinte forma.
- Se
phonenão for NULL, retornephone. - Se
phonefor NULL eemailnão for NULL, retorneemail. - Se tanto
phonequantoemailforem NULL, retorne'Não registrado'.
4.2 Diferenças entre IFNULL e COALESCE
| Comparison item | IFNULL | COALESCE |
|---|---|---|
| NULL handling | Returns the fallback value if one expression is NULL | Evaluates multiple expressions and returns the first non-NULL value |
| Number of arguments | Only 2 | 2 or more (multiple allowed) |
| Use case | Simple NULL replacement | NULL handling with priority order |
| Execution speed | Fast (compares only 2 values) | Slightly slower (evaluates multiple values in order) |
4.3 Exemplos práticos de IFNULL e COALESCE
Exemplo 1: Substituição simples de NULL
Com IFNULL, você pode selecionar o valor não‑NULL entre dois valores.
SELECT name, IFNULL(phone, 'Not registered') AS contact_info
FROM customers;
Resultado
| name | phone | contact_info |
|---|---|---|
| Sato | 080-1234-5678 | 080-1234-5678 |
| Suzuki | NULL | Not registered |
Exemplo 2: Prefira o primeiro valor não‑NULL disponível
Com COALESCE, você pode recuperar o primeiro valor não‑NULL.
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Resultado
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
- Se
phonenão for NULL, retornephone - Se
phonefor NULL eemailnão for NULL, retorneemail - Se tanto
phonequantoemailforem NULL, retorne'Não registrado'
4.4 Como escolher entre IFNULL e COALESCE
✔ Quando você deve usar IFNULL
✅ Quando você quer uma substituição simples de NULL por um valor padrão
✅ Quando dois argumentos são suficientes (por exemplo, converter NULL para 0)
✔ Quando você deve usar COALESCE
✅ Quando você quer encontrar o primeiro valor não-NULL (por exemplo, phone → email → “Not registered”)
✅ Quando você precisa avaliar três ou mais valores
4.5 Comparação de desempenho entre IFNULL e COALESCE
Em geral, IFNULL é mais rápido que COALESCE.
Isso ocorre porque IFNULL avalia apenas dois valores, enquanto COALESCE avalia vários valores em ordem.
Teste de desempenho
Ao aplicar IFNULL e COALESCE a 1 milhão de linhas, você pode ver resultados como o seguinte.
| Function | Execution time (seconds) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.05 |
➡ Com grandes volumes de dados, IFNULL pode ser ligeiramente mais rápido.
➡ No entanto, se você precisar de apenas um fallback, use IFNULL; se quiser múltiplos candidatos, use COALESCE.

5. Funções de tratamento de NULL em bancos de dados diferentes do MySQL
O MySQL fornece a função IFNULL para lidar com valores NULL, mas outros sistemas de gerenciamento de banco de dados (SGBD) utilizam funções diferentes.
Nos principais bancos de dados como Oracle, PostgreSQL e SQL Server, é comum usar funções que diferem do MySQL para o tratamento de NULL.
Esta seção explica como os valores NULL são tratados em bancos de dados diferentes do MySQL.
5.1 Tratamento de NULL no Oracle: a função NVL
No Oracle, a função NVL é fornecida como equivalente ao IFNULL do MySQL.
A função NVL retorna outro valor quando o valor especificado é NULL.
Sintaxe
NVL(expression, fallback_value)
- expression : A coluna ou valor a ser verificado quanto a NULL
- fallback_value : O valor a ser retornado quando for NULL (se não for NULL, a expressão é retornada como está)
Exemplo
SELECT name, NVL(salary, 0) AS salary
FROM employees;
Resultado
| name | salary |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
O comportamento do NVL é quase o mesmo do IFNULL do MySQL, portanto no Oracle você pode simplesmente usar NVL.
5.2 Tratamento de NULL no PostgreSQL e SQL Server: a função COALESCE
No PostgreSQL e SQL Server, a função COALESCE é usada para substituir valores NULL por alternativas.
Essa função pode retornar o primeiro valor não-NULL entre múltiplos candidatos.
Sintaxe
COALESCE(expr1, expr2, ..., exprN)
- Avalia da esquerda para a direita e retorna o primeiro valor não-NULL
- Retorna NULL se todos os argumentos forem NULL
Exemplo
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Resultado
| name | phone | contact_info | |
|---|---|---|---|
| Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
| Suzuki | NULL | suzuki@example.com | suzuki@example.com |
| Takahashi | NULL | NULL | Not registered |
Como mostrado acima, no PostgreSQL e SQL Server, usar COALESCE permite um tratamento de NULL mais flexível que o IFNULL do MySQL.
5.3 Comparação de funções de tratamento de NULL entre bancos de dados
| Database | NULL-handling function | Role |
|---|---|---|
| MySQL | IFNULL(expression, fallback_value) | Convert NULL to a fallback value |
| Oracle | NVL(expression, fallback_value) | Convert NULL to a fallback value (equivalent to IFNULL) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) | Return the first non-NULL value |
- Tratamento simples de NULL →
IFNULL(MySQL) ouNVL(Oracle) - Selecionar o melhor valor entre múltiplos candidatos →
COALESCE(PostgreSQL, SQL Server)
5.4 Observações ao migrar entre diferentes SGBDs
Ao migrar sistemas entre diferentes bancos de dados, é necessário prestar atenção às diferenças nas funções de tratamento de NULL.
Em particular, ao migrar de Oracle para MySQL, você deve reescrever NVL para IFNULL.
Exemplos de reescrita durante a migração
- Oracle (NVL)
SELECT NVL(salary, 0) AS salary FROM employees;
- MySQL (IFNULL)
SELECT IFNULL(salary, 0) AS salary FROM employees;
- PostgreSQL / SQL Server (COALESCE)
SELECT COALESCE(salary, 0) AS salary FROM employees;
Also, because COALESCE can accept multiple arguments, it is more flexible than Oracle’s NVL or MySQL’s IFNULL.
During migration, it’s important to choose the correct function for the target database.
6. Perguntas Frequentes (FAQ)
Questions about MySQL’s IFNULL function and NULL handling are important for developers and database administrators.
This section summarizes common questions about IFNULL.
Q1. Are the IFNULL function and the NVL function the same?
➡ They provide almost the same functionality, but the function name differs depending on the database.
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
In MySQL, use IFNULL; in Oracle, use NVL to convert NULL values to a fallback value.
Q2. What is the difference between IFNULL and COALESCE?
➡ IFNULL returns the non-NULL value between two arguments, while
COALESCE returns the first non-NULL value among multiple arguments.
| Function | Feature |
|---|---|
IFNULL(a, b) | If a is NULL, return b (only two arguments) |
COALESCE(a, b, c, ...) | Evaluates left to right and returns the first non-NULL value |
Examples
SELECT IFNULL(NULL, 'Fallback value'); -- Result: 'Fallback value'
SELECT COALESCE(NULL, NULL, 'First non-NULL value'); -- Result: 'First non-NULL value'
✔ When you should use IFNULL
✅ Return a specific default value when NULL (e.g., if NULL then 0)
✅ When you only compare two values
✔ When you should use COALESCE
✅ Retrieve the first non-NULL value (e.g., phone → email → default value)
✅ When you need to evaluate three or more values
Q3. Can IFNULL be used with data types other than numbers?
➡ Yes. IFNULL can be used with strings, dates, numbers, and more.
Example 1: Using strings
SELECT name, IFNULL(email, 'Not registered') AS email
FROM users;
Example 2: Using dates
SELECT name, IFNULL(last_login, '2000-01-01') AS last_login
FROM users;
However, mixing different data types (such as numbers and strings) can cause errors, so be careful.
SELECT IFNULL(100, 'Error'); -- May cause an error due to different data types
Q4. Does using IFNULL reduce performance?
➡ In general, the performance impact is minimal, but it can matter when processing large volumes of data.
IFNULLis usually fast because it only checks two values- However, heavy use of
IFNULLon very large datasets (millions of rows) can affect index optimization in some cases
🔹 Performance optimization tips
- Set indexes appropriately
- Queries like
IFNULL(column, 0) = 100may prevent indexes from being used in some cases - One approach is to store values with an appropriate default instead of NULL from the beginning
IFNULLis lighter thanCOALESCE
- Because
COALESCEevaluates multiple values in order,IFNULLcan be faster in many cases
Q5. Can you use CASE instead of IFNULL?
➡ Yes. You can achieve similar behavior with CASE, but it becomes more verbose.
With IFNULL
SELECT name, IFNULL(salary, 0) AS salary
FROM employees;
With CASE
SELECT name,
CASE WHEN salary IS NULL THEN 0 ELSE salary END AS salary
FROM employees;
✔ IFNULL is concise and easy to use
✔ CASE supports more flexible conditions (e.g., you can include non-NULL conditions as well)
Q6. Can IFNULL be used in a WHERE clause?
➡ Yes. IFNULL can be used inside a WHERE clause.
Example: Replace NULL with a specific value when searching
SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
This retrieves records where status is NULL.
Summary
IFNULLandNVLhave almost the same functionality, but differ by DBMSIFNULLevaluates 2 values;COALESCEevaluates multiple values- Works with strings, dates, numbers, and more
- For large datasets, consider index optimization
- You can use
CASEinstead ofIFNULL IFNULLcan also be used inWHEREclauses
7. Conclusão
Neste artigo, abordamos detalhadamente a função IFNULL do MySQL, incluindo como lidar com valores NULL, como ela difere de outras funções e exemplos práticos.
Por fim, vamos revisar brevemente o que foi abordado.
7.1 O que é a função IFNULL?
IFNULLretorna um valor de fallback quando o valor especificado é NULL- Sintaxe :
IFNULL(expression, fallback_value)
- Ao evitar NULL, você pode prevenir erros de cálculo e problemas de dados ausentes
7.2 Exemplos práticos de IFNULL
- Substitua NULL por um valor padrão (0 ou uma string específica)
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Manipule corretamente cálculos que incluem NULL
SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Converta NULL para uma string apropriada, como “Não registrado”
SELECT id, IFNULL(email, 'Not registered') AS email FROM users;
- Use em cláusulas
WHEREpara filtrar valores NULLSELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
7.3 Diferenças entre IFNULL e COALESCE
IFNULLretorna o valor não-NULL entre dois argumentosCOALESCEretorna o primeiro valor não-NULL entre múltiplos argumentos- Como escolher
- Manipulação simples de NULL →
IFNULL - Selecionar o primeiro valor não-NULL →
COALESCE
7.4 Manipulação de NULL em outros DBMS
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
- O
NVLda Oracle é quase o mesmo que oIFNULLdo MySQL - PostgreSQL e SQL Server normalmente utilizam
COALESCE - Durante a migração, você deve substituir as funções adequadamente
7.5 Desempenho e cuidados para IFNULL
IFNULLé mais leve queCOALESCE- Com grandes conjuntos de dados, o desempenho pode degradar se a otimização de índices for afetada
- Tenha cuidado para manter os tipos de dados consistentes (não misture tipos numéricos e de string)
7.6 Conclusões finais
- No MySQL, use
IFNULLpara lidar corretamente com NULL - Você pode processar dados sem ser impactado por NULL
- Entenda as diferenças entre
COALESCEeNVLe use a função correta - Ao migrar entre bancos de dados, preste atenção às diferenças nas funções de tratamento de NULL


