Qué significa realmente NULL
Desconocido; no es cero ni está vacío
Qué significa realmente NULL es una lección gratuita de SQL Academy en CoddyKit. Esta es la lección 1 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.
Conozca NULL
NULL es la forma que tiene SQL de decir «No lo sé». No es cero, ni una cadena vacía ni false — representa la ausencia de un valor.
Siempre que una columna no tiene un valor conocido, la base de datos almacena NULL en ella. Aprender cómo se comporta NULL es uno de los pasos más importantes para escribir consultas correctas.
-- A customers table where some phone numbers are unknown
SELECT id, name, phone
FROM customers;
-- id | name | phone
-- ---+---------+------------
-- 1 | Alice | 555-0101
-- 2 | Bob | NULL <- phone unknown
-- 3 | Carol | NULLNULL no es cero
Un error habitual consiste en tratar NULL como el número 0. Son conceptos completamente distintos.
0es un valor conocido: cero.NULLsignifica que el valor falta o se desconoce.
Si el saldo de una cuenta es 0, el cliente no tiene dinero. Si es NULL, simplemente todavía no conocemos el saldo.
SELECT id, balance
FROM accounts;
-- id | balance
-- ---+--------
-- 1 | 0 <- known: empty wallet
-- 2 | NULL <- unknown: not recorded yetNULL no es una cadena vacía
En las columnas de texto, NULL y la cadena vacía '' también son diferentes.
''es una cadena de longitud cero — un valor conocido y presente.NULLsignifica que no se proporcionó ninguna cadena.
Puede almacenar una nota vacía deliberadamente o dejar la nota completamente ausente. SQL distingue ambos casos.
SELECT id, note, length(note) AS note_len
FROM tickets;
-- id | note | note_len
-- ---+------+----------
-- 1 | '' | 0 <- empty but present
-- 2 | NULL | NULL <- absent; length is also unknownLógica trivaluada
La lógica normal tiene dos resultados: true y false. SQL añade un tercero: unknown.
Cualquier comparación que implique NULL da como resultado unknown, porque no se puede comparar con un valor que no se tiene. Esto se denomina lógica trivaluada.
-- Each comparison with NULL returns UNKNOWN, not true/false
SELECT
NULL = 5 AS eq, -- unknown
NULL <> 5 AS neq, -- unknown
NULL = NULL AS self_eq, -- unknown (!)
NULL > 0 AS gt; -- unknownNULL = NULL no es true
La regla más sorprendente es la siguiente: NULL = NULL no es true. Se evalúa como unknown.
¿Por qué? Si dos valores son desconocidos, no se puede afirmar que sean iguales — podrían ser cualquier cosa. Para comprobar si algo es NULL, debe utilizar IS NULL en lugar de =.
-- Wrong: never returns rows, because NULL = NULL is unknown
SELECT * FROM customers WHERE phone = NULL;
-- Right: use IS NULL
SELECT * FROM customers WHERE phone IS NULL;WHERE solo conserva las filas TRUE
Una cláusula WHERE conserva una fila únicamente cuando su condición es true. Las filas cuya condición es false o unknown se descartan.
Por eso, filtrar una columna NULL con = elimina silenciosamente filas que quizá esperaba ver.
-- Bob and Carol have NULL phones, so phone = '555-0101'
-- is UNKNOWN for them and they are excluded.
SELECT name
FROM customers
WHERE phone = '555-0101';
-- Returns only AliceNULL se propaga en las operaciones aritméticas
NULL es contagioso en las expresiones. Casi cualquier operación aritmética o de cadenas que implique NULL produce NULL.
Si desconoce uno de los valores de entrada, tampoco puede conocer el resultado.
SELECT
10 + NULL AS sum, -- NULL
100 * NULL AS prod, -- NULL
NULL / 2 AS div, -- NULL
'Hi ' || NULL AS greet; -- NULL (string concat)De dónde provienen los NULL
Los NULL aparecen en varias situaciones habituales:
- Un
INSERTque omite una columna que admite valores NULL. - Una unión externa sin ninguna fila coincidente en uno de los lados.
- Una agregación sobre cero filas; por ejemplo,
SUMde un conjunto vacío devuelveNULL.
Conocer su origen le ayuda a decidir cómo gestionarlos.
-- Omitting phone inserts NULL automatically
INSERT INTO customers (id, name) VALUES (4, 'Dan');
SELECT id, name, phone FROM customers WHERE id = 4;
-- 4 | Dan | NULLCómo evitar NULL: NOT NULL
Si una columna debe tener siempre un valor, declárela como NOT NULL. De este modo, la base de datos rechaza cualquier fila que intente dejarla sin valor.
Es una forma eficaz de mantener limpios los datos y evitar sorpresas relacionadas con NULL más adelante.
CREATE TABLE users (
id integer PRIMARY KEY,
email text NOT NULL, -- must always be provided
bio text -- nullable: optional
);
-- This fails: email cannot be NULL
INSERT INTO users (id, bio) VALUES (1, 'hi');NULL y DISTINCT / GROUP BY
Hay un caso en el que SQL trata los NULL como iguales: la agrupación y la eliminación de duplicados.
En DISTINCT y GROUP BY, todos los valores NULL se reúnen en un único grupo, aunque NULL = NULL sea unknown en el resto de los casos. Esta excepción especial mantiene la utilidad de las agrupaciones.
SELECT phone, count(*)
FROM customers
GROUP BY phone;
-- phone | count
-- ---------+------
-- 555-0101 | 1
-- NULL | 2 <- all NULLs grouped togetherResumen del modelo mental
Recuerde estas reglas siempre que vea un NULL:
- NULL significa desconocido, no cero ni vacío.
- Las comparaciones con NULL producen unknown — use
IS NULL/IS NOT NULL. WHEREsolo conserva las filas true.- Las operaciones aritméticas con NULL producen NULL.
- La agrupación trata todos los NULL como un único grupo.
-- The two correct NULL tests
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;Comprobación rápida
¿En qué resultado se evalúa la expresión NULL = NULL en SQL estándar?
Resumen
Ahora comprende qué es realmente NULL: un marcador que representa un valor ausente o desconocido, distinto de 0 y ''.
Ha visto la lógica trivaluada de SQL, por qué = NULL nunca funciona, cómo se propaga NULL en las operaciones aritméticas y cómo WHERE descarta las filas desconocidas. A continuación, aprenderá la forma correcta de comprobar los NULL con IS NULL y IS NOT NULL.
-- Remember the golden rule
SELECT * FROM customers WHERE phone IS NULL; -- correct
-- SELECT * FROM customers WHERE phone = NULL; -- always empty!Preguntas frecuentes
¿La lección «Qué significa realmente NULL» es gratis?
Sí — el texto completo de «Qué significa realmente 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 «Qué significa realmente NULL»?
Desconocido; no es cero ni está vacío 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 1 de 4.
¿Cuánto tiempo toma la lección «Qué significa realmente 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