COALESCE, NULLIF e ISNULL
Sustituya valores predeterminados y conozca la diferencia entre COALESCE y las funciones específicas de cada proveedor
COALESCE, NULLIF e ISNULL es una lección gratuita de SQL Interview Prep en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de SQL Interview Prep, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Interview Prep incluye 4 lecciones en total.
Sustitución de valores para NULL
Ahora que sabe detectar NULL, la siguiente habilidad para una entrevista es reemplazarlo por un valor predeterminado adecuado. La herramienta portable y estándar para hacerlo es COALESCE.
También conocerá NULLIF, que hace lo contrario al convertir un valor específico en NULL, y las funciones de proveedores ISNULL (SQL Server) e IFNULL (MySQL), que los candidatos suelen confundir con COALESCE.
Saber exactamente en qué se diferencia cada una, especialmente en el número de argumentos y el tipo devuelto, es una pregunta frecuente en las evaluaciones.
Conceptos básicos de COALESCE
COALESCE acepta cualquier número de argumentos y devuelve el primero que no sea NULL, recorriéndolos de izquierda a derecha. Si todos los argumentos son NULL, devuelve NULL.
Es un estándar ANSI y funciona en las principales bases de datos, por lo que debe ser su respuesta predeterminada. Utilícelo para proporcionar alternativas en la presentación, los cálculos o la agrupación.
-- Show 0 instead of NULL for missing bonuses
SELECT name, COALESCE(bonus, 0) AS bonus
FROM employees;
-- Multiple fallbacks, first non-NULL wins
SELECT COALESCE(mobile_phone, home_phone, 'no phone') AS contact
FROM customers;COALESCE usa evaluación de cortocircuito
Un matiz que los entrevistadores suelen explorar: conceptualmente, COALESCE evalúa los argumentos de izquierda a derecha y se detiene en el primero que no sea NULL. Por tanto, no necesita evaluar una expresión posterior y costosa cuando una anterior ya produce un resultado.
En la práctica, los optimizadores pueden evaluar expresiones de forma anticipada en algunos motores, así que no dependa de este comportamiento para evitar errores como la división entre cero. Sin embargo, sí está garantizada la precedencia de izquierda a derecha para determinar qué valor prevalece.
-- Prefer the manual override, else the computed value,
-- else a constant default
SELECT COALESCE(manual_price, list_price * 1.1, 9.99) AS price
FROM products;COALESCE y el tipo de datos del resultado
Un detalle sutil que puede causar problemas: el tipo de datos del resultado de COALESCE se determina mediante la precedencia de tipos de todos sus argumentos en conjunto, no solo mediante el primero. Mezclar tipos incompatibles puede provocar errores o truncamientos inesperados.
Por ejemplo, aplicar COALESCE a una columna entera y a un valor predeterminado de tipo cadena puede fallar o realizar una conversión implícita, según el motor. Los entrevistadores utilizan este caso para comprobar si tiene en cuenta los tipos.
-- Risky: integer column with a string fallback
-- may error or force a cast depending on dialect
SELECT COALESCE(score, 'N/A') FROM tests;
-- Safer: keep the fallback type-compatible, or cast explicitly
SELECT COALESCE(CAST(score AS VARCHAR), 'N/A') FROM tests;ISNULL (SQL Server) frente a COALESCE
SQL Server dispone de ISNULL(expr, replacement). Parece COALESCE, pero presenta diferencias importantes que a los entrevistadores les gusta contrastar:
- Número de argumentos: ISNULL acepta exactamente dos; COALESCE acepta varios.
- Tipo devuelto: ISNULL utiliza el tipo del primer argumento, lo que puede truncar el valor de reemplazo. COALESCE utiliza la precedencia combinada de tipos.
- Portabilidad: ISNULL solo está disponible en SQL Server; COALESCE es un estándar ANSI.
Recomendación para expresar en voz alta: prefiera COALESCE por su portabilidad y su tipado predecible.
-- SQL Server: ISNULL may truncate the replacement to
-- the first argument's type (e.g. CHAR(1))
SELECT ISNULL(code, 'UNKNOWN') FROM items;
-- If code is CHAR(1), 'UNKNOWN' becomes 'U'
-- COALESCE picks the wider type and keeps 'UNKNOWN'
SELECT COALESCE(code, 'UNKNOWN') FROM items;IFNULL y NVL
Otros dialectos tienen sus propias abreviaturas de dos argumentos:
- MySQL / SQLite:
IFNULL(expr, replacement) - Oracle:
NVL(expr, replacement), además deNVL2para una variante then/else
Las tres funcionan como un COALESCE de dos argumentos. Si le preguntan específicamente por la forma idiomática de MySQL u Oracle, mencione estas funciones; en cualquier otro caso, utilice COALESCE.
-- MySQL
SELECT IFNULL(bonus, 0) FROM employees;
-- Oracle
SELECT NVL(bonus, 0) FROM employees;
-- NVL2(bonus, 'has bonus', 'no bonus') -> if/else on NULLNULLIF: la dirección opuesta
NULLIF(a, b) devuelve NULL cuando a = b; de lo contrario, devuelve a. Su función es crear un NULL deliberadamente, justo lo contrario de COALESCE.
Su uso más conocido es evitar la división entre cero. Envuelva el denominador en NULLIF(denominator, 0): si es cero, el divisor se convierte en NULL y la división completa devuelve NULL en lugar de generar un error.
-- Avoid divide-by-zero: returns NULL instead of erroring
SELECT revenue / NULLIF(orders, 0) AS avg_order_value
FROM daily_stats;
-- NULLIF(5, 5) -> NULL
-- NULLIF(5, 3) -> 5Combinar NULLIF y COALESCE
Estas dos funciones combinan a la perfección. Una expresión habitual en entrevistas es «división segura que muestra 0 cuando no hay pedidos». Utilice NULLIF para evitar el error y, después, COALESCE para reemplazar el NULL resultante.
Esta expresión idiomática y compacta demuestra soltura: resuelve el caso límite y la presentación en una sola expresión.
SELECT
COALESCE(revenue / NULLIF(orders, 0), 0) AS avg_order_value
FROM daily_stats;
-- orders = 0 -> NULLIF gives NULL -> division gives NULL
-- -> COALESCE turns it into 0Tratar las cadenas vacías como NULL
Otro uso práctico de NULLIF es convertir las cadenas vacías en NULL para poder procesarlas de forma uniforme con COALESCE. Los datos sucios suelen mezclar NULL y ''; esto normaliza ambos casos.
Interprete el patrón así: «si el valor está vacío, conviértalo en NULL y, después, utilice un valor predeterminado». Es una respuesta limpia y portable a la pregunta «¿cómo trata las cadenas vacías y los valores ausentes de la misma manera?».
-- Treat both '' and NULL as missing, default to 'Anonymous'
SELECT COALESCE(NULLIF(TRIM(username), ''), 'Anonymous')
FROM users;Ejemplo más detallado: combinar valores tras varios JOIN
Después de un LEFT JOIN, las filas sin coincidencia producen NULL en el lado derecho. COALESCE convierte esos valores en valores predeterminados significativos en el resultado, un requisito muy habitual en los informes.
Así, los clientes sin pedidos siguen apareciendo (gracias a LEFT JOIN) y su total se muestra como 0 en lugar de NULL. Mencionar que COALESCE se aplica después del JOIN, no dentro de él, demuestra que comprende el orden de evaluación.
SELECT
c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Customers with no orders get 0 instead of NULLPuntos clave para la entrevista
Resumen del conjunto de herramientas para sustituir valores:
- COALESCE(a, b, ...): devuelve el primer valor que no sea NULL; admite varios argumentos, es un estándar ANSI y determina el tipo mediante la precedencia. Es la opción predeterminada.
- ISNULL / IFNULL / NVL: abreviaturas de dos argumentos específicas de cada proveedor; ISNULL puede truncar el resultado al tipo del primer argumento.
- NULLIF(a, b): devuelve NULL cuando los valores son iguales; es excelente para evitar la división entre cero y normalizar cadenas vacías.
- Combine
COALESCE(x / NULLIF(y, 0), 0)para obtener una división segura y presentable.
Comience con COALESCE y mencione las variantes de cada proveedor solo cuando el dialecto esté definido.
Comprobación rápida
Elija la expresión de división segura.
Resumen
Ahora puede sustituir valores y generar NULL:
- COALESCE devuelve el primer valor que no sea NULL entre varios argumentos; es la opción portable predeterminada.
- ISNULL (SQL Server), IFNULL (MySQL) y NVL (Oracle) son abreviaturas de dos argumentos; ISNULL puede truncar el resultado al tipo del primer argumento.
- NULLIF(a, b) devuelve NULL cuando los dos valores son iguales, por lo que es ideal para evitar la división entre cero y normalizar cadenas vacías.
- Combine estas funciones para crear expresiones seguras y presentables, y para asignar valores predeterminados a los NULL posteriores a un LEFT JOIN.
Lección final: cómo se comporta NULL dentro de las funciones de agregación, los JOIN y DISTINCT.
Preguntas frecuentes
¿La lección «COALESCE, NULLIF e ISNULL» es gratis?
Sí — el texto completo de «COALESCE, NULLIF e ISNULL» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de SQL Interview Prep, actualiza a CoddyKit PRO. El curso de SQL Interview Prep incluye 4 lecciones en total.
¿Qué aprenderé en «COALESCE, NULLIF e ISNULL»?
Sustituya valores predeterminados y conozca la diferencia entre COALESCE y las funciones específicas de cada proveedor Practicas SQL Interview Prep con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar SQL Interview Prep?
No se requiere experiencia previa. SQL Interview Prep en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.
¿Cuánto tiempo toma la lección «COALESCE, NULLIF e ISNULL»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de SQL Interview Prep?
Sí. Cada lección de SQL Interview Prep incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Lógica trivalente y UNKNOWN
- IS NULL, IS NOT NULL e igualdad segura para NULL
- COALESCE, NULLIF e ISNULL
- Valores NULL en agregaciones, joins y DISTINCT