- 1 1. Introducción
- 2 2. ¿Función IFNULL?
- 3 3. Ejemplos de la función IFNULL
- 4 Esta sentencia SQL trata a email como '' (cadena vacía) cuando es NULL, y recupera solo usuarios con NULL.
- 5 4. Diferencias entre las funciones 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. ¿La función IFNULL es la misma que la función NVL?
- 7.2 Q2. ¿Cuál es la diferencia entre la función IFNULL y la función COALESCE?
- 7.3 Q3. ¿Se puede usar IFNULL con tipos de datos distintos a los numéricos?
- 7.4 Q4. ¿Usar IFNULL afecta el rendimiento?
- 7.5 Q5. ¿Puedo usar una sentencia CASE en lugar de IFNULL?
- 7.6 Q6. ¿Se puede usar IFNULL en la cláusula WHERE?
- 7.7 Resumen
- 8 7. Resumen
1. Introducción
Cuando manejamos bases de datos, el procesamiento de valores NULL es un punto muy importante.
En particular, aquellos acostumbrados a la función NVL de Oracle a menudo notan que NVL no puede usarse al migrar a MySQL no es raro.
En MySQL, usando la función IFNULL en lugar de NVL, es posible procesar adecuadamente los valores NULL.
Este artículo explica en detalle el manejo de valores NULL en MySQL, e introduce el uso de IFNULL y sus diferencias con otras funciones de procesamiento de NULL.
1.1 ¿Qué es un valor NULL?
En una base de datos, NULL se refiere a «un estado donde no se establece ningún valor».
Esto es diferente de «0» o una cadena vacía, por lo que si no se maneja correctamente, puede causar errores inesperados o resultados de datos incorrectos.
Por ejemplo, supongamos que existen datos como los siguientes.
ID | Name | Age |
|---|---|---|
1 | Yamada | veinticinco |
2 | Sato | NULL |
3 | Suzuki | 30 |
En los datos anteriores, la edad de Sato con ID «2» es NULL.
Si realizas cálculos tal cual, puede resultar en errores o resultados no deseados.
1.2 Manejo de valores NULL en MySQL
2. ¿Función IFNULL?
MySQL proporciona la función IFNULL como una función para reemplazar valores NULL con otro valor.
Esto cumple el mismo papel que la función NVL de Oracle.
Manejando adecuadamente los valores NULL, puedes prevenir errores de cálculo por datos faltantes y crear consultas SQL más estables.
Aquí, vamos a analizar detenidamente el uso básico de la función IFNULL.
2.1 Sintaxis básica de la función IFNULL
La sintaxis básica de la función IFNULL es la siguiente.
IFNULL(expression, replacement_value)
- expression : La columna o valor a verificar por NULL
- replacement_value : El valor a devolver si es NULL (devuelve el original si no lo es)
Por ejemplo, considera la siguiente sentencia SQL.
SELECT IFNULL(NULL, 'alternative value');
En este caso, al especificar NULL, el resultado es 'alternative value'.
Result |
|---|
valor alternativo |
Por el contrario, si se especifica un valor no NULL, ese valor se devuelve tal cual.
SELECT IFNULL('Hello', 'alternative value');
Result |
|---|
Hello |
2.2 Características de la función IFNULL
La función IFNULL tiene las siguientes características.
Puede convertir valores NULL a valores específicos
* Puedes establecer un valor predeterminado alternativo para columnas que contienen NULL.Sintaxis simple para el procesamiento
* Más fácil de escribir que usar sentenciasCASE.Necesita considerar los tipos de datos
* Los argumentos deIFNULLdeben ser del mismo tipo de dato.
Por ejemplo, la siguiente sentencia SQL causará un error.
SELECT IFNULL(100, 'error');
Motivo: Porque el tipo numérico (100) y el tipo de cadena (‘error’) se mezclan.
En este caso, el valor de reemplazo también necesita ser numérico.
SELECT IFNULL(100, 0);
2.3 Cuándo usar la función IFNULL
Aquí hay escenarios específicos donde la función IFNULL es útil.
- Establecer valores predeterminados para NULL
* Por ejemplo, establecer la cantidad de bonificación del empleado en «0» si es NULL.
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
- Evitar cálculos que incluyan valores NULL
* Calcular con valores NULL tal cual resultará en NULL.
* Al usarIFNULLpara evitar NULL, el cálculo previsto se vuelve posible.
SELECT name, salary, IFNULL(bonus, 0) AS bonus, salary + IFNULL(bonus, 0) AS total_income
FROM employees;
- Manejar correctamente NULL en informes o agregaciones
* En el análisis de datos, si se incluye NULL, pueden generarse informes incorrectos.
* Al usarIFNULL, puedes reemplazar NULL con valores específicos, lo que permite un procesamiento de datos consistente.
3. Ejemplos de la función IFNULL
En la sección anterior, explicamos el uso básico de la función IFNULL.
Esta sección introduce ejemplos de uso específicos para manejar datos reales.
3.1 Reemplazar valores NULL con valores por defecto
Si una tabla en la base de datos contiene valores NULL, puede causar un comportamiento no deseado.
Para resolver este problema, es posible usar IFNULL para reemplazar NULL con un valor por defecto.
Ejemplo: Establecer valor predeterminado a 0 si el bono del empleado es NULL
SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;
Datos antes de la ejecución
name | bonus |
|---|---|
Satou | 5000 |
Suzuki | NULL |
Takahashi | 8000 |
Después de aplicar IFNULL
name | bonus |
|---|---|
Satou | 5000 |
Suzuki | 0 |
Takahashi | 8000 |
Al reemplazar NULL por 0, el procesamiento de agregaciones y similares puede realizarse sin problemas.
3.2 Evitar cálculos que involucren valores NULL
En MySQL, los resultados de cálculos que involucren NULL se vuelven NULL.
Por lo tanto, es necesario 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 | salario | bonus |
|---|---|---|
Satou | 300000 | 5000 |
Suzuki | 280000 | NULL |
Takahashi | 320000 | 8000 |
Después de aplicar IFNULL
name | salario | bonus | total_income |
|---|---|---|---|
Satou | 300000 | 5000 | 305000 |
Suzuki | 280000 | 0 | 280000 |
Takahashi | 320000 | 8000 | 328000 |
Si el bono es NULL, el monto total (salary + bonus) también se convierte en NULL, pero al aplicar IFNULL, se procesa NULL como 0 y permite un cálculo correcto.
3.3 Reemplazar valores NULL con otra cadena
Además de números, también puedes establecer una cadena predeterminada en caso de NULL.
Ejemplo: Mostrar ‘Sin registrar’ para usuarios cuya dirección de correo no está registrada
SELECT id, name, IFNULL(email, 'Unregistered') AS email
FROM users;
Datos antes de la ejecución
id | name | correo electrónico |
|---|---|---|
1 | Satou | satou@example.com |
2 | Suzuki | NULL |
3 | Takahashi | takahashi@example.com |
Después de aplicar IFNULL
id | name | correo electrónico |
|---|---|---|
1 | Satou | satou@example.com |
2 | Suzuki | No registrado |
3 | Takahashi | takahashi@example.com |
Si se deja como NULL, queda en blanco, pero al usar IFNULL, puede mostrar explícitamente ‘Sin registrar’.
3.4 Usar IFNULL en la cláusula WHERE
También es posible usar IFNULL en la cláusula WHERE para filtrar valores NULL según condiciones específicas.
Ejemplo: Recuperar solo usuarios con valores NULL
SELECT *
FROM users
WHERE IFNULL(email, '') = '';
Esta sentencia SQL trata a email como '' (cadena vacía) cuando es NULL, y recupera solo usuarios con NULL.
3.5 Colocar NULL al final con ORDER BY
Normalmente, al usar ORDER BY, NULL se muestra primero, pero al usar IFNULL puedes colocar NULL al final.
Ejemplo: Colocar filas con valores NULL al final
SELECT name, salary
FROM employees
ORDER BY IFNULL(salary, 0) ASC;
4. Diferencias entre las funciones IFNULL y COALESCE
MySQL tiene múltiples funciones para manejar valores NULL, pero entre ellas, la función IFNULL y la función COALESCE suelen compararse. Ambas tienen el papel de ‘reemplazar valores NULL con valores alternativos’, pero su uso y comportamiento difieren.
Esta sección explica cómo comprender las diferencias entre IFNULL y COALESCE y usarlas adecuadamente.
4.1 ¿Qué es la función COALESCE?
COALESCE es una función que devuelve el primer valor no-NULL de varios argumentos. En otras palabras, a diferencia de IFNULL, que «selecciona el valor no-NULL de dos valores», COALESCE difiere en que selecciona el primer valor no-NULL entre varios valores.
Syntax
COALESCE(expression1, expression2, ... , expressionN)
- Evalúa de izquierda a derecha y devuelve el primer valor no-NULL
- Devuelve NULL si todos son NULL
Ejemplo: Reemplazo de valores NULL usando COALESCE
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Esto determina valores de la siguiente manera.
- Si
phoneno es NULL, devuelvephone. - Si
phonees NULL yemailno es NULL, devuelveemail. - Si ambos,
phoneyemail, son NULL, devuelve'Not registered'.
4.2 Diferencias entre IFNULL y COALESCE
Comparison Item | IFNULL | COALESCE |
|---|---|---|
| Manejo de NULL | Devuelve un valor alternativo si una expresión es NULL | Evalúa múltiples expresiones y devuelve el primer valor no nulo. |
| Número de argumentos | Solo 2 | 2 o más (se permiten múltiples) |
| Usage | Reemplazo simple de valor NULL | Manejo de nulos con orden de prioridad |
| Velocidad de Ejecución | Rápido (compara solo 2 valores) | Un poco más lento (evalúa varios valores secuencialmente) |
4.3 Ejemplos prácticos de IFNULL y COALESCE
Ejemplo 1: Reemplazo sencillo de valor NULL
Con IFNULL, puedes seleccionar el valor no-NULL de 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 | No registrado |
Ejemplo 2: Priorizando valores no-NULL
Con COALESCE, puedes obtener el primer valor no-NULL.
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Resultado
name | phone | correo electrónico | información de contacto |
|---|---|---|---|
Sato | 080-1234-5678 | satou@example.com | 080-1234-5678 |
Suzuki | NULL | suzuki@example.com | suzuki@example.com |
Takahashi | NULL | NULL | No registrado |
- Si
phoneno es NULL, devuelvephone - Si
phonees NULL yemailno es NULL, devuelveemail - Si ambos
phoneyemailson NULL, devuelve'Not registered'
4.4 Cómo elegir entre IFNULL y COALESCE
✔ Casos donde usar IFNULL
✅Cuando deseas simplemente reemplazar valores NULL con un valor por defecto✅Cuando solo son suficientes 2 argumentos (p. ej., convertir NULL a 0)
✔ Casos donde usar COALESCE
✅Cuando deseas encontrar el primer valor no NULL (p. ej., prioridad: número de teléfono → dirección de correo → «Not registered»)
✅Cuando necesitas evaluar 3 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 solo evalúa 2 valores, mientras que COALESCE evalúa múltiples valores secuencialmente.
Prueba de rendimiento
Cuando se aplica IFNULL y COALESCE a 1 millón de filas de datos, los tiempos de procesamiento se compararon, resultando en los siguientes resultados.
Función | Tiempo de ejecución (segundos) |
|---|---|
IFNULL | 0.02 |
COALESCE | 0.05 |
➡IFNULL es ligeramente más rápido para volúmenes de datos grandes.
➡ Sin embargo, usa IFNULL si solo necesitas una sustitución NULL, y COALESCE si deseas evaluar múltiples candidatos.

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 distintas.
En particular, las principales bases de datos como Oracle, PostgreSQL y SQL Server suelen usar funciones diferentes a MySQL para manejar valores NULL.
En esta sección, explicaremos cómo manejar valores NULL en bases de datos distintas a MySQL.
5.1 Manejo de NULL en Oracle: Función NVL
En Oracle, la función NVL se ofrece como equivalente a IFNULL de MySQL. La función NVL devuelve un valor diferente si el valor especificado es NULL.
Sintaxis
NVL(expression, replacement_value)
- expresión : La columna o valor a verificar si es NULL
- valor de reemplazo : El valor que se devuelve si es NULL (devuelve el original si no es NULL)
Ejemplo de uso
SELECT name, NVL(salary, 0) AS salary
FROM employees;
Resultado de la ejecución
name | salario |
|---|---|
Satō | 5000 |
Suzuki | 0 |
Takahashi | 8000 |
El comportamiento de la función NVL es casi idéntico al de IFNULL de MySQL, por lo que no hay problemas al usar NVL en Oracle.
5.2 Manejo de NULL en PostgreSQL y SQL Server: Función COALESCE
En PostgreSQL y SQL Server, la función COALESCE se utiliza para reemplazar valores NULL con valores alternativos.
Esta función puede devolver el primer valor no NULL entre múltiples valores.
Sintaxis
COALESCE(expression1, expression2, ..., expressionN)
- Evalúa de izquierda a derecha y devuelve el primer valor no NULL
- Devuelve NULL si todos son NULL
Ejemplo de uso
SELECT name, COALESCE(phone, email, 'Not registered') AS contact_info
FROM customers;
Resultado de la ejecución
name | phone | correo electrónico | informacion_de_contacto |
|---|---|---|---|
Satō | 080-1234-5678 | satou@example.com | 080-1234-5678 |
Suzuki | NULL | suzuki@example.com | suzuki@example.com |
Takahashi | NULL | NULL | No registrado |
Así, en PostgreSQL y SQL Server, al usar COALESCE, los valores NULL pueden manejarse de manera más flexible que con IFNULL de MySQL.
5.3 Comparación de funciones de manejo de NULL en cada base de datos
Base de datos | Función de Manejo de NULL | Role |
|---|---|---|
| MySQL | IFNULL(expression, replacement_value) | Convertir NULL a valor de reemplazo |
| Oracle | NVL(expression, replacement_value) | Convert NULL to replacement value (equivalent to IFNULL) |
| PostgreSQL / SQL Server | COALESCE(expression1, expression2, ...) | Regresa el primer valor no NULL |
- Manejo simple de NULL →
IFNULL(MySQL) oNVL(Oracle) - Seleccionar el óptimo entre múltiples valores →
COALESCE(PostgreSQL, SQL Server)
5.4 Precauciones al migrar entre diferentes DBMS
Al migrar sistemas entre diferentes bases de datos, es necesario prestar atención a las diferencias en las funciones de manejo de NULL.
En particular, al migrar de Oracle a MySQL, NVL debe reescribirse 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;
Additionally, since COALESCE can accept multiple arguments, it is more flexible than Oracle’s NVL or MySQL’s IFNULL. When migrating, it is important to select the appropriate function according to the database being used.
6. Preguntas Frecuentes (FAQ)
La función IFNULL de MySQL y las preguntas sobre el manejo de valores NULL son puntos importantes para desarrolladores y administradores de bases de datos.
Esta sección resume y explica preguntas comunes sobre IFNULL.
Q1. ¿La función IFNULL es la misma que la función NVL?
➡Tienen casi la misma funcionalidad, pero el nombre de la función difiere según la base de datos utilizada.
Base de datos | Función de manejo de NULL |
|---|---|
| MySQL | IFNULL(expression, replacement_value) |
| Oracle | NVL(expression, replacement_value) |
| PostgreSQL / SQL Server | COALESCE(expr1, expr2, ...) |
En MySQL, puedes usar IFNULL, y en Oracle, NVL, para convertir valores NULL en valores de reemplazo.
Q2. ¿Cuál es la diferencia entre la función IFNULL y la función COALESCE?
➡IFNULL devuelve el valor no NULL entre los dos argumentos, mientras que COALESCE devuelve el primer valor no NULL entre múltiples argumentos.
Función | Características |
|---|---|
IFNULL(a, b) | Si |
COALESCE(a, b, c, ...) | Evalúa de izquierda a derecha y devuelve el primer valor que no sea NULL |
Ejemplos de Uso
SELECT IFNULL(NULL, 'replacement_value'); -- Result: 'replacement_value'
SELECT COALESCE(NULL, NULL, 'first_non_null_value'); -- Result: 'first_non_null_value'
✔ Situaciones en las que debes usar IFNULL✅ Querer devolver un valor por defecto específico cuando es NULL (por ejemplo, establecer a 0 si es NULL)
✅ Cuando hay solo dos valores a comparar✔ Situaciones en las que debes usar COALESCE✅ Querer obtener el primer valor no NULL (por ejemplo, número de teléfono → dirección de correo → valor por defecto)
✅ Cuando se evalúan tres o más valores
Q3. ¿Se puede usar IFNULL con tipos de datos distintos a los numéricos?
➡Sí, IFNULL se puede usar con varios tipos de datos como cadenas, fechas y números.
Ejemplo 1: Usando con Cadenas
SELECT name, IFNULL(email, 'unregistered') AS email
FROM users;
Ejemplo 2: Usando con Tipos de Fecha
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 causar errores, así que ten cuidado.
SELECT IFNULL(100, 'error'); -- May cause an error due to different data types
Q4. ¿Usar IFNULL afecta el rendimiento?
➡En principio, no hay un impacto casi significativo en el rendimiento, pero debe considerarse al procesar grandes volúmenes de datos.
IFNULLsolo verifica dos valores, por lo que suele procesarse rápidamente- Sin embargo, al usar
IFNULLextensamente en grandes volúmenes de datos (millones de filas o más), puede afectar la optimización de índices
🔹 Puntos de Optimización del Rendimiento
- Configurar índices de manera adecuada
- Consultas como
IFNULL(column, 0) = 100pueden no aplicar índices - Una forma es convertir los valores
NULLa valores por defecto apropiados desde el inicio y almacenarlos
IFNULLes más ligero queCOALESCE
- Dado que
COALESCEevalúa múltiples valores en secuencia,IFNULLsuele ser más rápido
Q5. ¿Puedo usar una sentencia CASE en lugar de IFNULL?
➡Sí, puedes lograr el mismo procesamiento que IFNULL usando una sentencia CASE, pero se vuelve más verboso.
Caso con IFNULL
SELECT name, IFNULL(salary, 0) AS salary
FROM employees;
Caso usando 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 permite configuraciones de condiciones más flexibles (por ejemplo, incluir condiciones distintas a NULL)
Q6. ¿Se puede usar IFNULL en la cláusula WHERE?
➡Sí, IFNULL también se puede usar dentro de la cláusula WHERE.
Ejemplo: Buscar reemplazando NULL con un valor específico
SELECT * FROM users WHERE IFNULL(status, 'unset') = 'unset';
Esto te permite recuperar registros donde status es NULL.
Resumen
IFNULLyNVLtienen casi la misma funcionalidad, pero difieren según el DBMSIFNULLevalúa 2 valores,COALESCEevalúa múltiples valores- Se puede usar con varios tipos de datos como cadenas, fechas y números
- Tenga cuidado con la optimización de índices al procesar grandes volúmenes de datos
- También es posible usar una sentencia
CASEen lugar deIFNULL IFNULLtambién se puede usar en la cláusulaWHERE
7. Resumen
En este artículo, explicamos en detalle la función IFNULL de MySQL, incluyendo métodos para manejar valores NULL, diferencias con otras funciones y ejemplos prácticos de uso. Finalmente, revisemos brevemente el contenido hasta ahora.
7.1 ¿Qué es la función IFNULL?
IFNULLes una función que devuelve un valor de reemplazo si el valor especificado es NULL- Syntax :
IFNULL(expression, replacement_value)
- Evitando NULL, previene errores de cálculo y pérdida de datos.
7.2 Ejemplos de uso específicos de IFNULL
- Reemplazar NULL con un valor por defecto (0 o una cadena específica)
SELECT name, IFNULL(bonus, 0) AS bonus FROM employees;
- Gestionar correctamente cálculos que incluyan NULL
SELECT name, salary + IFNULL(bonus, 0) AS total_income FROM employees;
- Convertir NULL a una cadena adecuada como «Unregistered»
SELECT id, IFNULL(email, 'Unregistered') AS email FROM users;
- Uso en la cláusula
WHEREpara filtrar valores NULL
SELECT * FROM users WHERE IFNULL(status, 'Not Set') = 'Not Set';
7.3 Diferencias entre IFNULL y COALESCE
IFNULLdevuelve el valor no-NULL entre los dos argumentosCOALESCEdevuelve el primer valor no-NULL entre varios argumentos- Guía de uso
- Manejo simple de NULL →
IFNULL - Al seleccionar el primer valor no-NULL →
COALESCE
7.4 Manejo de NULL en otros DBMS
Base de datos | Función de manejo de NULL |
|---|---|
| MySQL | IFNULL(expression, replacement_value) |
| Oracle | NVL(expression, replacement_value) |
| PostgreSQL / SQL Server | COALESCE(expression1, expression2, ...) |
NVLde Oracle tiene casi la misma funcionalidad queIFNULLde MySQL- En PostgreSQL y SQL Server,
COALESCEse usa comúnmente - Al migrar entre bases de datos, es necesario reemplazar las funciones adecuadamente
7.5 Rendimiento y notas para IFNULL
IFNULLtiene un procesamiento más ligero queCOALESCE- Si no se considera la optimización de índices, puede haber una disminución de velocidad en el procesamiento de grandes volúmenes de datos
- Tenga cuidado con la consistencia de tipos de datos (no mezcle números y cadenas)
7.6 Resumen
- En MySQL, use
IFNULLpara manejar NULL adecuadamente - Es posible procesar datos que no se vean afectados por NULL
- Comprenda las diferencias con
COALESCEyNVL, y utilícelos adecuadamente - Al migrar entre bases de datos, tenga cuidado con las diferencias en las funciones de manejo de NULL


