IS NULL e IS NOT NULL
Compruebe correctamente los valores ausentes
IS NULL e IS NOT NULL es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 2 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.
Comprobar valores ausentes
Dado que las comparaciones con NULL siempre devuelven unknown, SQL proporciona dos operadores específicos para comprobar valores ausentes: IS NULL y IS NOT NULL.
Estas son las únicas formas fiables de encontrar o excluir NULL. En esta lección aprenderá a utilizarlos correctamente.
-- Rows where phone is missing
SELECT name FROM customers WHERE phone IS NULL;
-- Rows where phone is present
SELECT name FROM customers WHERE phone IS NOT NULL;Por qué falla = NULL
Puede resultar tentador escribir WHERE phone = NULL, pero nunca coincide con nada. La condición se evalúa como unknown para todas las filas, y WHERE solo conserva las filas true.
El resultado es un conjunto vacío — un error silencioso, ya que no se produce ninguna excepción.
-- Always returns 0 rows, even if NULLs exist
SELECT * FROM customers WHERE phone = NULL;
-- The fix
SELECT * FROM customers WHERE phone IS NULL;IS NULL en acción
IS NULL devuelve true exactamente cuando falta el valor y false en caso contrario. Nunca devuelve unknown.
Por eso es seguro utilizarlo en cualquier lugar donde necesite un resultado limpio de verdadero o falso.
SELECT id, name, (phone IS NULL) AS missing_phone
FROM customers;
-- id | name | missing_phone
-- ---+-------+--------------
-- 1 | Alice | f
-- 2 | Bob | t
-- 3 | Carol | tIS NOT NULL en acción
IS NOT NULL es exactamente lo contrario: true cuando el valor está presente y false cuando falta.
Utilícelo para filtrar las filas que realmente contienen datos, como los clientes a los que puede llamar.
SELECT name, phone
FROM customers
WHERE phone IS NOT NULL;
-- name | phone
-- ------+----------
-- Alice | 555-0101Combinar con AND / OR
Puede combinar las comprobaciones de NULL con otras condiciones mediante AND y OR.
Por ejemplo, puede buscar clientes activos que todavía necesitan tener registrado un número de teléfono — una consulta habitual para comprobar la calidad de los datos.
SELECT id, name
FROM customers
WHERE is_active = true
AND phone IS NULL;
-- Active customers missing a phone numberNULL en NOT IN: una trampa
NOT IN se comporta de forma problemática cuando la lista contiene un NULL. Si algún valor del conjunto es NULL, NOT IN puede devolver unknown para todas las filas y eliminar resultados que esperaba obtener.
Prefiera NOT EXISTS o filtre primero los NULL de la subconsulta.
-- Risky: if blocked_ids contains a NULL, this returns nothing
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked);
-- Safer
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked WHERE user_id IS NOT NULL);IS DISTINCT FROM
PostgreSQL ofrece IS DISTINCT FROM y IS NOT DISTINCT FROM — operadores de comparación seguros con NULL.
A diferencia de =, tratan dos NULL como iguales y un NULL frente a un valor como diferente. Siempre devuelven true o false, nunca unknown.
SELECT
NULL IS NOT DISTINCT FROM NULL AS a, -- true: both NULL = same
NULL IS DISTINCT FROM 5 AS b, -- true: NULL differs from 5
5 IS DISTINCT FROM 5 AS c; -- false: same valueComparar dos columnas que admiten NULL
Al comparar dos columnas que podrían contener NULL, el operador = normal no detecta el caso en que ambas sean NULL. IS NOT DISTINCT FROM lo gestiona correctamente.
Es muy útil para encontrar filas que no han cambiado, incluso cuando se desconoce el valor.
-- Rows where old and new phone are 'the same',
-- counting NULL = NULL as same
SELECT id
FROM customer_changes
WHERE old_phone IS NOT DISTINCT FROM new_phone;Contar los NULL
Un uso práctico de IS NULL es auditar la calidad de los datos: contar cuántas filas no tienen un valor.
Combínelo con FILTER (PostgreSQL) o con una expresión CASE dentro de COUNT para contar los NULL y los valores que no son NULL uno al lado del otro.
SELECT
count(*) AS total,
count(*) FILTER (WHERE phone IS NULL) AS missing,
count(*) FILTER (WHERE phone IS NOT NULL) AS present
FROM customers;Comprobaciones de NULL en restricciones CHECK
Puede utilizar comprobaciones de NULL dentro de las restricciones CHECK para imponer reglas como «si una fila se ha enviado, debe tener una fecha de envío».
Nota: una restricción CHECK se cumple cuando su condición es true o unknown, así que debe analizar cuidadosamente los casos con NULL.
CREATE TABLE orders (
id integer PRIMARY KEY,
status text NOT NULL,
ship_date date,
CHECK (status <> 'shipped' OR ship_date IS NOT NULL)
);Buenas prácticas
Adopte estos hábitos para trabajar con NULL de forma segura:
- Compruebe siempre con
IS NULL/IS NOT NULL, nunca con= NULL. - Tenga cuidado con
NOT INcuando las subconsultas admitan NULL. - Use
IS DISTINCT FROMpara realizar comparaciones de igualdad seguras con NULL. - Audite los datos ausentes con
count(*) FILTER (...).
-- The reliable toolkit
WHERE col IS NULL
WHERE col IS NOT NULL
WHERE a IS DISTINCT FROM b
WHERE a IS NOT DISTINCT FROM bComprobación rápida
Desea obtener todos los clientes cuya columna phone no contiene ningún valor. ¿Qué cláusula WHERE es correcta?
Recapitulación
Ha aprendido la forma correcta de comprobar si faltan valores mediante IS NULL y IS NOT NULL, y por qué = NULL nunca funciona.
También ha visto la trampa de NOT IN, el operador IS DISTINCT FROM, seguro frente a NULL, y cómo auditar los NULL con FILTER. A continuación aprenderá a sustituir los NULL por valores predeterminados adecuados mediante COALESCE y NULLIF.
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;Preguntas frecuentes
¿La lección «IS NULL e IS NOT NULL» es gratis?
Sí — el texto completo de «IS NULL e IS NOT NULL» 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 «IS NULL e IS NOT NULL»?
Compruebe correctamente los valores ausentes 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 2 de 4.
¿Cuánto tiempo toma la lección «IS NULL e IS NOT NULL»?
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.
Todas las lecciones de este curso
- Qué significa realmente NULL
- IS NULL e IS NOT NULL
- COALESCE y NULLIF
- NULL en agregaciones y JOINs