Guía de la función IFNULL de MySQL: Reemplazar valores NULL (alternativa a NVL de Oracle)

目次

1. Introducción

Al trabajar con bases de datos, manejar valores NULL es un punto crítico.
En particular, no es raro que las personas acostumbradas a la función NVL de Oracle se den cuenta de que NVL no está disponible al migrar a MySQL.

En MySQL, puedes manejar correctamente los valores NULL usando la función IFNULL en lugar de NVL.
Este artículo explica cómo trabajar con valores NULL en MySQL en detalle, cubriendo cómo usar IFNULL y en qué se diferencia de otras funciones de manejo de NULL.

1.1 ¿Qué es un valor NULL?

En las bases de datos, NULL significa “no se ha establecido ningún valor”.
Porque esto es distinto de “0” o de una “cadena vacía”, no manejarlo adecuadamente puede generar errores inesperados o resultados de consultas incorrectos.

Por ejemplo, supongamos que tienes datos como los siguientes.

IDNameAge
1Yamada25
2SatoNULL
3Suzuki30

En los datos anteriores, la edad del ID “2” (Sato) es NULL.
Si ejecutas cálculos tal cual, puedes obtener errores o resultados no deseados.

1.2 Cómo MySQL maneja los valores NULL

2. ¿Qué es la función IFNULL?

MySQL proporciona la función IFNULL como una función para reemplazar valores NULL por otro valor.
Desempeña un papel similar al de la función NVL de Oracle.

Al manejar los valores NULL de forma adecuada, puedes prevenir problemas de cálculo causados por datos faltantes y crear consultas SQL más estables.
Veamos más de cerca el uso básico de IFNULL.

2.1 Sintaxis básica de IFNULL

La sintaxis básica de la función IFNULL es la siguiente.

IFNULL(expression, fallback_value)
  • expression : La columna o valor que se verifica para NULL
  • fallback_value : El valor que se devuelve cuando la expresión es NULL (si no es NULL, se devuelve la expresión tal cual)

Por ejemplo, considera la siguiente sentencia SQL.

SELECT IFNULL(NULL, 'Fallback value');

En este caso, como se especifica NULL, el resultado se convierte en 'Fallback value'.

Result
Fallback value

Por otro lado, si especificas un valor que no sea NULL, ese valor se devuelve tal cual.

SELECT IFNULL('Hello', 'Fallback value');
Result
Hello

2.2 Características clave de IFNULL

La función IFNULL tiene las siguientes características.

  1. Puede convertir valores NULL en un valor específico
  • Puedes establecer un valor predeterminado alternativo para columnas que puedan contener NULL.
  1. Utiliza una sintaxis sencilla
  • Es más simple de escribir que usar una expresión CASE.
  1. Debes considerar los tipos de datos
  • Se recomienda que los argumentos de IFNULL sean del mismo tipo de dato.

Por ejemplo, el siguiente SQL puede generar un error.

SELECT IFNULL(100, 'Error');

Razón: se mezclan un tipo numérico (100) y un tipo cadena (‘Error’).
En este caso, el valor de respaldo también debe ser numérico.

SELECT IFNULL(100, 0);

2.3 Cuándo deberías usar IFNULL

A continuación, algunas situaciones prácticas donde IFNULL es útil.

  1. Establecer un valor predeterminado para NULL
  • Por ejemplo, si el bono de un empleado es NULL, establecerlo en 0.
    SELECT name, IFNULL(bonus, 0) AS bonus
    FROM employees;
    
  1. Evitar cálculos que involucren NULL
  • Si calculas con NULL tal cual, el resultado también será NULL.
  • Usar IFNULL para evitar NULL permite que el cálculo se realice como se espera.
    SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
    FROM employees;
    
  1. Manejar NULL correctamente en informes y agregaciones
  • Si hay NULL durante el análisis, pueden generarse informes incorrectos.
  • Al reemplazar NULL por un valor específico usando IFNULL, puedes procesar los datos de forma consistente.

3. Ejemplos prácticos de la función IFNULL

En la sección anterior explicamos los conceptos básicos de la función IFNULL.
En esta sección, presentaremos ejemplos concretos de su uso con datos reales.

3.1 Reemplazar valores NULL con un valor predeterminado

Si una tabla contiene valores NULL, puede provocar comportamientos no deseados.
Para solucionarlo, puedes usar IFNULL para reemplazar NULL por un valor predeterminado.

Ejemplo: Si el bono de un empleado es NULL, establezca el valor predeterminado en 0

SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;

Datos antes de la ejecución

namebonus
Sato5000
SuzukiNULL
Takahashi8000

Después de aplicar IFNULL

namebonus
Sato5000
Suzuki0
Takahashi8000

Reemplazar NULL con 0 hace que la agregación y el procesamiento relacionado sean más fluidos.

3.2 Evitar cálculos que incluyan NULL

En MySQL, el resultado de un cálculo que incluye NULL se vuelve NULL.
Por lo tanto, necesita usar IFNULL para evitar NULL.

Ejemplo: Calcular el total de salario y bono

SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;

Datos antes de la ejecución

namesalarybonus
Sato3000005000
Suzuki280000NULL
Takahashi3200008000

Después de aplicar IFNULL

namesalarybonustotal_income
Sato3000005000305000
Suzuki2800000280000
Takahashi3200008000328000

Si el bono es NULL, el total (salary + bonus) también se vuelve NULL,
pero al aplicar IFNULL, MySQL trata NULL como 0 y calcula correctamente.

3.3 Reemplazar NULL con otra cadena

Puede establecer una cadena predeterminada no solo para números, sino también cuando el valor es NULL.

Ejemplo: Mostrar “No registrado” para usuarios sin dirección de correo electrónico

SELECT id, name, IFNULL(email, 'Not registered') AS email
FROM users;

Datos antes de la ejecución

idnameemail
1Satosatou@example.com
2SuzukiNULL
3Takahashitakahashi@example.com

Después de aplicar IFNULL

idnameemail
1Satosatou@example.com
2SuzukiNot registered
3Takahashitakahashi@example.com

Si se deja como NULL, el campo aparece en blanco, pero IFNULL lo hace explícito con “No registrado”.

3.4 Usar IFNULL en una cláusula WHERE

Puede usar IFNULL en una cláusula WHERE para filtrar basándose en condiciones que incluyen valores NULL.

Ejemplo: Recuperar solo usuarios con valores NULL

SELECT *
FROM users
WHERE IFNULL(email, '') = '';

Este SQL trata email como '' (una cadena vacía) cuando es NULL, y recupera solo los usuarios cuyo correo es NULL.

3.5 Colocar valores NULL al final en ORDER BY

Normalmente, cuando usa ORDER BY, los valores NULL pueden aparecer primero, pero puede usar IFNULL para moverlos al final.

Ejemplo: Colocar filas con valores NULL al final

SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;

4. Diferencias entre IFNULL y COALESCE

MySQL ofrece múltiples funciones para manejar valores NULL, y IFNULL y COALESCE se comparan a menudo.
Ambos reemplazan valores NULL con alternativas, pero su uso y comportamiento difieren.

En esta sección, explicamos las diferencias entre IFNULL y COALESCE y cómo elegir la adecuada.

4.1 ¿Qué es la función COALESCE?

La función COALESCE devuelve el primer valor no NULL entre varios argumentos.
En otras palabras, mientras IFNULL selecciona el valor no NULL entre dos valores,
COALESCE se diferencia al seleccionar el primer valor no NULL entre múltiples candidatos.

Sintaxis

COALESCE(expr1, expr2, ... , exprN)
  • Evalúa de izquierda a derecha y devuelve el primer valor no NULL
  • Devuelve NULL si todos los argumentos son NULL

Ejemplo: Reemplazar NULL usando COALESCE

SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;

En este caso, los valores se determinan de la siguiente manera.

  1. Si phone no es NULL, devuelve phone.
  2. Si phone es NULL y email no es NULL, devuelve email.
  3. Si tanto phone como email son NULL, devuelve 'No registrado'.

4.2 Diferencias entre IFNULL y COALESCE

Comparison itemIFNULLCOALESCE
NULL handlingReturns the fallback value if one expression is NULLEvaluates multiple expressions and returns the first non-NULL value
Number of argumentsOnly 22 or more (multiple allowed)
Use caseSimple NULL replacementNULL handling with priority order
Execution speedFast (compares only 2 values)Slightly slower (evaluates multiple values in order)

4.3 Ejemplos prácticos de IFNULL y COALESCE

Ejemplo 1: Reemplazo simple de NULL

Con IFNULL, puede seleccionar el valor no NULL entre dos valores.

SELECT name, IFNULL(phone, 'Not registered') AS contact_info
FROM customers;

Resultado

namephonecontact_info
Sato080-1234-5678080-1234-5678
SuzukiNULLNot registered

Ejemplo 2: Preferir el primer valor no NULL disponible

Con COALESCE, puede obtener el primer valor no NULL.

SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;

Resultado

namephoneemailcontact_info
Sato080-1234-5678satou@example.com080-1234-5678
SuzukiNULLsuzuki@example.comsuzuki@example.com
TakahashiNULLNULLNot registered
  • Si phone no es NULL, devuelve phone
  • Si phone es NULL y email no es NULL, devuelve email
  • Si tanto phone como email son NULL, devuelve 'Not registered'

4.4 Cómo elegir entre IFNULL y COALESCE

✔ Cuándo deberías usar IFNULL

Cuando deseas un reemplazo simple de NULL por un valor predeterminado
Cuando dos argumentos son suficientes (p.ej., convertir NULL a 0)

✔ Cuándo deberías usar COALESCE

Cuando deseas encontrar el primer valor no NULL (p.ej., phone → email → “Not registered”)
Cuando necesitas evaluar tres o más valores

4.5 Comparación de rendimiento entre IFNULL y COALESCE

En general, IFNULL es más rápido que COALESCE.
Esto se debe a que IFNULL evalúa solo dos valores, mientras que COALESCE evalúa varios valores en orden.

Prueba de rendimiento

Al aplicar IFNULL y COALESCE a 1 millón de filas, puedes observar resultados como los siguientes.

FunctionExecution time (seconds)
IFNULL0.02
COALESCE0.05

Con grandes volúmenes de datos, IFNULL puede ser ligeramente más rápido.
➡ Sin embargo, si solo necesitas un respaldo, usa IFNULL; si deseas múltiples candidatos, usa COALESCE.

5. Funciones de manejo de NULL en bases de datos distintas a MySQL

MySQL proporciona la función IFNULL para manejar valores NULL, pero otros sistemas de gestión de bases de datos (DBMS) utilizan funciones diferentes.
En bases de datos importantes como Oracle, PostgreSQL y SQL Server, es común usar funciones distintas a las de MySQL para el manejo de NULL.

Esta sección explica cómo se manejan los valores NULL en bases de datos distintas a MySQL.

5.1 Manejo de NULL en Oracle: la función NVL

En Oracle, se proporciona la función NVL como equivalente a IFNULL de MySQL.
La función NVL devuelve otro valor cuando el valor especificado es NULL.

Sintaxis

NVL(expression, fallback_value)
  • expression : La columna o valor a comprobar si es NULL
  • fallback_value : El valor a devolver cuando es NULL (si no es NULL, la expresión se devuelve tal cual)

Ejemplo

SELECT name, NVL(salary, 0) AS salary
FROM employees;

Resultado

namesalary
Sato5000
Suzuki0
Takahashi8000

El comportamiento de NVL es casi idéntico al de IFNULL de MySQL, por lo que en Oracle puedes usar simplemente NVL.

5.2 Manejo de NULL en PostgreSQL y SQL Server: la función COALESCE

En PostgreSQL y SQL Server, se utiliza la función COALESCE para reemplazar valores NULL por alternativas.
Esta función puede devolver el primer valor no NULL entre varios candidatos.

Sintaxis

COALESCE(expr1, expr2, ..., exprN)
  • Evalúa de izquierda a derecha y devuelve el primer valor no NULL
  • Devuelve NULL si todos los argumentos son NULL

Ejemplo

SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;

Resultado

namephoneemailcontact_info
Sato080-1234-5678satou@example.com080-1234-5678
SuzukiNULLsuzuki@example.comsuzuki@example.com
TakahashiNULLNULLNot registered

Como se muestra arriba, en PostgreSQL y SQL Server, usar COALESCE permite un manejo de NULL más flexible que el IFNULL de MySQL.

5.3 Comparación de funciones de manejo de NULL entre bases de datos

DatabaseNULL-handling functionRole
MySQLIFNULL(expression, fallback_value)Convert NULL to a fallback value
OracleNVL(expression, fallback_value)Convert NULL to a fallback value (equivalent to IFNULL)
PostgreSQL / SQL ServerCOALESCE(expr1, expr2, ...)Return the first non-NULL value
  • Manejo simple de NULLIFNULL (MySQL) o NVL (Oracle)
  • Seleccionar el mejor valor entre varios candidatosCOALESCE (PostgreSQL, SQL Server)

5.4 Notas al migrar entre diferentes DBMS

Al migrar sistemas entre diferentes bases de datos, debes prestar atención a las diferencias en las funciones de manejo de NULL.
En particular, al migrar de Oracle a MySQL, debes reescribir NVL a IFNULL.

Ejemplos de reescritura durante la migración

  • 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. Preguntas Frecuentes (FAQ)

Las preguntas sobre la función IFNULL de MySQL y el manejo de NULL son importantes para desarrolladores y administradores de bases de datos.
Esta sección resume preguntas comunes sobre IFNULL.

Q1. ¿Son la función IFNULL y la función NVL la misma?

Proporcionan casi la misma funcionalidad, pero el nombre de la función difiere según la base de datos.

DatabaseNULL-handling function
MySQLIFNULL(expression, fallback_value)
OracleNVL(expression, fallback_value)
PostgreSQL / SQL ServerCOALESCE(expr1, expr2, ...)

En MySQL, use IFNULL; en Oracle, use NVL para convertir valores NULL a un valor de respaldo.

Q2. ¿Cuál es la diferencia entre IFNULL y COALESCE?

IFNULL devuelve el valor no NULL entre dos argumentos, mientras que
COALESCE devuelve el primer valor no NULL entre múltiples argumentos.

FunctionFeature
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

Ejemplos

SELECT IFNULL(NULL, 'Fallback value'); -- Result: 'Fallback value'
SELECT COALESCE(NULL, NULL, 'First non-NULL value'); -- Result: 'First non-NULL value'

✔ Cuándo deberías usar IFNULL
✅ Devuelve un valor predeterminado específico cuando es NULL (p. ej., si es NULL entonces 0)
✅ Cuando solo comparas dos valores

✔ Cuándo deberías usar COALESCE
✅ Recupera el primer valor no NULL (p. ej., teléfono → correo → valor predeterminado)
✅ Cuando necesitas evaluar tres o más valores

Q3. ¿Puede IFNULL usarse con tipos de datos diferentes a los números?

Sí. IFNULL puede usarse con cadenas, fechas, números y más.

Ejemplo 1: Uso de cadenas

SELECT name, IFNULL(email, 'Not registered') AS email
FROM users;

Ejemplo 2: Uso de fechas

SELECT name, IFNULL(last_login, '2000-01-01') AS last_login
FROM users;

Sin embargo, mezclar diferentes tipos de datos (como números y cadenas) puede generar errores, así que ten cuidado.

SELECT IFNULL(100, 'Error'); -- May cause an error due to different data types

Q4. ¿El uso de IFNULL reduce el rendimiento?

En general, el impacto en el rendimiento es mínimo, pero puede ser relevante al procesar grandes volúmenes de datos.

  • IFNULL suele ser rápido porque solo verifica dos valores
  • Sin embargo, el uso intensivo de IFNULL en conjuntos de datos muy grandes (millones de filas) puede afectar la optimización de índices en algunos casos

🔹 Consejos de optimización de rendimiento

  1. Establece los índices adecuadamente
  • Consultas como IFNULL(column, 0) = 100 pueden impedir que se usen índices en algunos casos
  • Una estrategia es almacenar los valores con un valor predeterminado adecuado en lugar de NULL desde el inicio
  1. IFNULL es más liviano que COALESCE
  • Debido a que COALESCE evalúa múltiples valores en orden, IFNULL puede ser más rápido en muchos casos

Q5. ¿Puedes usar CASE en lugar de IFNULL?

Sí. Puedes lograr un comportamiento similar con CASE, pero se vuelve más verboso.

Con IFNULL

SELECT name, IFNULL(salary, 0) AS salary
FROM employees;

Con CASE

SELECT name,
  CASE WHEN salary IS NULL THEN 0 ELSE salary END AS salary
FROM employees;

IFNULL es conciso y fácil de usar
CASE admite condiciones más flexibles (p. ej., puedes incluir también condiciones no NULL)

Q6. ¿Puede IFNULL usarse en una cláusula WHERE?

Sí. IFNULL puede usarse dentro de una cláusula WHERE.

Ejemplo: Reemplazar NULL con un valor específico al buscar

SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';

Esto recupera los registros donde status es NULL.

Resumen

  • IFNULL y NVL tienen casi la misma funcionalidad, pero difieren según el SGBD
  • IFNULL evalúa 2 valores; COALESCE evalúa múltiples valores
  • Funciona con cadenas, fechas, números y más
  • Para conjuntos de datos grandes, considera la optimización de índices
  • Puedes usar CASE en lugar de IFNULL
  • IFNULL también puede usarse en cláusulas WHERE

7. Conclusión

En este artículo, cubrimos en detalle la función IFNULL de MySQL, incluyendo cómo manejar valores NULL, cómo difiere de otras funciones y ejemplos prácticos. Finalmente, revisemos brevemente lo que hemos cubierto.

7.1 ¿Qué es la función IFNULL?

  • IFNULL devuelve un valor de respaldo cuando el valor especificado es NULL
  • Sintaxis :
    IFNULL(expression, fallback_value)
    
  • Al evitar NULL, puedes prevenir errores de cálculo y problemas de datos faltantes

7.2 Ejemplos prácticos de IFNULL

  • Reemplaza NULL con un valor predeterminado (0 o una cadena específica)
    SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
    
  • Maneja correctamente cálculos que incluyen NULL
    SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
    
  • Convierte NULL a una cadena apropiada como “No registrado”
    SELECT id, IFNULL(email, 'Not registered') AS email FROM users;
    
  • Úsalo en cláusulas WHERE para filtrar valores NULL
    SELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
    

7.3 Diferencias entre IFNULL y COALESCE

  • IFNULL devuelve el valor no NULL entre dos argumentos
  • COALESCE devuelve el primer valor no NULL entre varios argumentos
  • Cómo elegir
  • Manejo simple de NULL → IFNULL
  • Seleccionar el primer valor no NULL → COALESCE

7.4 Manejo de NULL en otros DBMS

DatabaseNULL-handling function
MySQLIFNULL(expression, fallback_value)
OracleNVL(expression, fallback_value)
PostgreSQL / SQL ServerCOALESCE(expr1, expr2, ...)
  • El NVL de Oracle es casi idéntico al IFNULL de MySQL
  • PostgreSQL y SQL Server suelen usar COALESCE
  • Durante la migración, debes reemplazar las funciones de manera adecuada

7.5 Rendimiento y precauciones para IFNULL

  • IFNULL es más liviano que COALESCE
  • Con conjuntos de datos grandes, el rendimiento puede degradarse si la optimización de índices se ve afectada
  • Ten cuidado de mantener los tipos de datos consistentes (no mezcles tipos numéricos y de cadena)

7.6 Conclusiones finales

  • En MySQL, usa IFNULL para manejar NULL correctamente
  • Puedes procesar datos sin que te afecte NULL
  • Comprende las diferencias con COALESCE y NVL y usa la función adecuada
  • Al migrar entre bases de datos, presta atención a las diferencias en las funciones de manejo de NULL