- 1 1. Introducción
- 2 2. ¿Qué es la función IFNULL?
- 3 3. Ejemplos prácticos de la función IFNULL
- 4 3.5 Colocar valores NULL al final en ORDER BY
- 5 4. Diferencias entre IFNULL y COALESCE
- 6 5. Funciones de manejo de NULL en bases de datos distintas a MySQL
- 7 6. Preguntas Frecuentes (FAQ)
- 7.1 Q1. ¿Son la función IFNULL y la función NVL la misma?
- 7.2 Q2. ¿Cuál es la diferencia entre IFNULL y COALESCE?
- 7.3 Q3. ¿Puede IFNULL usarse con tipos de datos diferentes a los números?
- 7.4 Q4. ¿El uso de IFNULL reduce el rendimiento?
- 7.5 Q5. ¿Puedes usar CASE en lugar de IFNULL?
- 7.6 Q6. ¿Puede IFNULL usarse en una cláusula WHERE?
- 7.7 Resumen
- 8 7. Conclusión
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.
| ID | Name | Age |
|---|---|---|
| 1 | Yamada | 25 |
| 2 | Sato | NULL |
| 3 | Suzuki | 30 |
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.
- Puede convertir valores NULL en un valor específico
- Puedes establecer un valor predeterminado alternativo para columnas que puedan contener NULL.
- Utiliza una sintaxis sencilla
- Es más simple de escribir que usar una expresión
CASE.
- Debes considerar los tipos de datos
- Se recomienda que los argumentos de
IFNULLsean 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.
- 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;
- Evitar cálculos que involucren NULL
- Si calculas con NULL tal cual, el resultado también será NULL.
- Usar
IFNULLpara 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;
- 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
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | NULL |
| Takahashi | 8000 |
Después de aplicar IFNULL
| name | bonus |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
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
| name | salary | bonus |
|---|---|---|
| Sato | 300000 | 5000 |
| Suzuki | 280000 | NULL |
| Takahashi | 320000 | 8000 |
Después de aplicar IFNULL
| name | salary | bonus | total_income |
|---|---|---|---|
| Sato | 300000 | 5000 | 305000 |
| Suzuki | 280000 | 0 | 280000 |
| Takahashi | 320000 | 8000 | 328000 |
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
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | NULL |
| 3 | Takahashi | takahashi@example.com |
Después de aplicar IFNULL
| id | name | |
|---|---|---|
| 1 | Sato | satou@example.com |
| 2 | Suzuki | Not registered |
| 3 | Takahashi | takahashi@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.
- Si
phoneno es NULL, devuelvephone. - Si
phonees NULL yemailno es NULL, devuelveemail. - Si tanto
phonecomoemailson NULL, devuelve'No registrado'.
4.2 Diferencias entre IFNULL y 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 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
| name | phone | contact_info |
|---|---|---|
| Sato | 080-1234-5678 | 080-1234-5678 |
| Suzuki | NULL | Not 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
| 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 |
- Si
phoneno es NULL, devuelvephone - Si
phonees NULL yemailno es NULL, devuelveemail - Si tanto
phonecomoemailson 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.
| Function | Execution time (seconds) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.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
| name | salary |
|---|---|
| Sato | 5000 |
| Suzuki | 0 |
| Takahashi | 8000 |
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
| 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 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
| 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 |
- Manejo simple de NULL →
IFNULL(MySQL) oNVL(Oracle) - Seleccionar el mejor valor entre varios candidatos →
COALESCE(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.
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(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.
| 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 |
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.
IFNULLsuele ser rápido porque solo verifica dos valores- Sin embargo, el uso intensivo de
IFNULLen conjuntos de datos muy grandes (millones de filas) puede afectar la optimización de índices en algunos casos
🔹 Consejos de optimización de rendimiento
- Establece los índices adecuadamente
- Consultas como
IFNULL(column, 0) = 100pueden 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
IFNULLes más liviano queCOALESCE
- Debido a que
COALESCEevalúa múltiples valores en orden,IFNULLpuede 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
IFNULLyNVLtienen casi la misma funcionalidad, pero difieren según el SGBDIFNULLevalúa 2 valores;COALESCEevalú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
CASEen lugar deIFNULL IFNULLtambién puede usarse en cláusulasWHERE
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?
IFNULLdevuelve 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
WHEREpara filtrar valores NULLSELECT * FROM users WHERE IFNULL(status, 'Not set') = 'Not set';
7.3 Diferencias entre IFNULL y COALESCE
IFNULLdevuelve el valor no NULL entre dos argumentosCOALESCEdevuelve 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
| Database | NULL-handling function |
|---|---|
| MySQL | IFNULL(expression, fallback_value) |
| Oracle | NVL(expression, fallback_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
- El
NVLde Oracle es casi idéntico alIFNULLde 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
IFNULLes más liviano queCOALESCE- 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
IFNULLpara manejar NULL correctamente - Puedes procesar datos sin que te afecte NULL
- Comprende las diferencias con
COALESCEyNVLy usa la función adecuada - Al migrar entre bases de datos, presta atención a las diferencias en las funciones de manejo de NULL


