COALESCE y NULLIF
Proporcione valores predeterminados y evite dividir entre cero
COALESCE y NULLIF es una lección gratuita de SQL Academy 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 Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de SQL Academy incluye 4 lecciones en total.
Sustitución de valores ausentes
Detectar los NULL es solo la mitad del trabajo — a menudo querrá sustituirlos por un valor predeterminado adecuado. La función COALESCE de SQL hace exactamente eso.
Y cuando quiera crear un NULL intencionadamente, por ejemplo, para evitar una división entre cero, NULLIF es la herramienta adecuada. Esta lección abarca ambos casos.
-- Show a placeholder when phone is missing
SELECT name, COALESCE(phone, 'no phone on file') AS phone
FROM customers;Cómo funciona COALESCE
COALESCE recibe cualquier número de argumentos y devuelve el primero que no sea NULL, de izquierda a derecha.
Si todos los argumentos son NULL, el resultado es NULL. Considérelo como «use esto, o aquello, o, finalmente, este valor alternativo».
SELECT
COALESCE(NULL, NULL, 'third', 'fourth') AS a, -- 'third'
COALESCE(NULL, 42) AS b, -- 42
COALESCE(NULL, NULL) AS c; -- NULLEncadenamiento de valores alternativos
Como COALESCE acepta varios argumentos, puede crear una cadena de preferencias.
Por ejemplo, puede dar preferencia a un número de móvil, después a uno del trabajo, luego a uno de casa y, por último, a un mensaje literal.
SELECT name,
COALESCE(mobile, work_phone, home_phone, 'unreachable') AS best_contact
FROM contacts;Valores predeterminados en los cálculos
NULL se propaga por las operaciones aritméticas, por lo que un solo valor ausente puede convertir todo un cálculo en NULL. Encierre la entrada que puede ser NULL en COALESCE para sustituirla por un valor neutro.
Aquí, un descuento ausente se trata como 0.
-- Without COALESCE, a NULL discount makes total NULL
SELECT
price - COALESCE(discount, 0) AS total
FROM line_items;Reglas de tipos de COALESCE
Todos los argumentos de COALESCE deben tener tipos compatibles. PostgreSQL elige un tipo común y genera un error si no puede hacerlo.
Por ejemplo, no puede mezclar un número y una cadena de texto libre sin convertirlos explícitamente — el valor alternativo también debe ser un número.
-- OK: both integers
SELECT COALESCE(score, 0) FROM results;
-- Cast when mixing types
SELECT COALESCE(score::text, 'n/a') FROM results;Introducción a NULLIF
NULLIF(a, b) hace, en cierto sentido, lo contrario de COALESCE: devuelve NULL cuando a = b y, de lo contrario, devuelve a.
Es una forma compacta de convertir un valor «centinela» específico en un NULL real.
SELECT
NULLIF(5, 5) AS a, -- NULL (equal)
NULLIF(5, 9) AS b, -- 5 (not equal)
NULLIF('', '') AS c; -- NULL (treat empty string as missing)NULLIF para evitar la división entre cero
El uso clásico de NULLIF es evitar errores de división. Dividir entre 0 genera un error, pero dividir entre NULL simplemente produce NULL.
Envuelva el divisor en NULLIF(divisor, 0) para convertir un fallo en un NULL seguro.
-- If total_visits is 0, this would error.
-- NULLIF turns the divisor into NULL, giving a NULL ratio instead.
SELECT
conversions / NULLIF(total_visits, 0) AS conversion_rate
FROM campaigns;Combinación de NULLIF y COALESCE
NULLIF y COALESCE combinan muy bien. Utilice NULLIF para convertir un valor centinela en NULL y, después, COALESCE para asignar a ese NULL un valor predeterminado adecuado.
Aquí, una nota que es una cadena vacía se convierte en el texto literal «—».
-- Treat '' as missing, then display a dash
SELECT
COALESCE(NULLIF(note, ''), '—') AS display_note
FROM tickets;Proporción media segura
Aplíquelo todo en una consulta de análisis sólida: protéjase contra la división entre cero con NULLIF y, después, muestre 0 en lugar de NULL con COALESCE.
La consulta nunca genera errores y siempre muestra un número limpio.
SELECT
product_id,
COALESCE(returns / NULLIF(orders, 0), 0) AS return_rate
FROM product_stats;COALESCE frente a IS NULL
Ambos tratan los NULL, pero tienen objetivos distintos:
IS NULL/IS NOT NULL— comprueban si faltan valores en una condición.COALESCE— sustituye un valor en la salida.
Utilice COALESCE al dar forma a los resultados y IS NULL al filtrar.
-- Filter (IS NULL)
SELECT * FROM customers WHERE phone IS NULL;
-- Substitute (COALESCE)
SELECT COALESCE(phone, 'unknown') FROM customers;Cómo combinarlo todo
Referencia rápida de esta lección:
COALESCE(a, b, c)→ primer valor no NULL.NULLIF(a, b)→ NULL cuando son iguales; de lo contrario,a.- Utilice
NULLIF(divisor, 0)para evitar la división entre cero. - Utilice
COALESCEpara asignar valores predeterminados en los cálculos y en la salida.
SELECT
COALESCE(nickname, full_name, 'guest') AS display_name,
revenue / NULLIF(orders, 0) AS avg_order_value
FROM accounts;Comprobación rápida
¿Qué devuelve NULLIF(amount, 0) cuando amount es 0?
Recapitulación
Ahora puede sustituir los NULL por valores predeterminados mediante COALESCE — gana el primer valor no NULL — y crear NULL intencionadamente con NULLIF — devuelve NULL cuando dos valores coinciden.
Ha visto el patrón para evitar la división entre cero y cómo encadenar ambas funciones para obtener una salida segura y limpia. A continuación explorará cómo se comportan los NULL dentro de COUNT, SUM y los JOIN.
SELECT
COALESCE(NULLIF(comment, ''), 'no comment') AS comment,
total / NULLIF(qty, 0) AS unit_price
FROM invoices;Preguntas frecuentes
¿La lección «COALESCE y NULLIF» es gratis?
Sí — el texto completo de «COALESCE y NULLIF» 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 Academy, actualiza a CoddyKit PRO. El curso de SQL Academy incluye 4 lecciones en total.
¿Qué aprenderé en «COALESCE y NULLIF»?
Proporcione valores predeterminados y evite dividir entre cero Practicas SQL Academy 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 Academy?
No se requiere experiencia previa. SQL Academy 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 y NULLIF»?
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 Academy?
Sí. Cada lección de SQL Academy 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.