Ir al contenido
wannacode

NULL: sin valor

En resumen: NULL en SQL significa un valor ausente o desconocido, por eso se comprueba con IS NULL y no con = NULL.

Problema

El cliente que desapareció

Marketing quiere escribir a todos los clientes que no son de Sofía. Hay 20 clientes, 6 de ellos de Sofía. Esperas 14:

SQLbase de datos: tienda

Salen 13. ¿Quién falta? Boris Mitev, que nunca dijo de qué ciudad es. No es de Sofía, y sin embargo no está en el resultado.

La idea

Desconocido

La ciudad de Boris es NULL: la ausencia de un valor. No es texto vacío ni el número 0. Significa «no lo sabemos».

Por eso SQL trabaja con tres respuestas: verdadero, falso y desconocido. «¿La ciudad de Boris es distinta de Sofía?» No lo sabemos, su ciudad es desconocida. La respuesta es «desconocido», y WHERE conserva solo las filas para las que es verdadero.

Lo mismo pasa cuando buscas NULL con =:

SQLbase de datos: tienda

Nada. NULL = NULL también es «desconocido»: dos valores desconocidos pueden ser iguales o no.

La idea

IS NULL

NULL tiene su propia comprobación: IS NULL, y lo contrario IS NOT NULL.

SQLbase de datos: tienda

Es la única forma correcta. = NULL es un error que no da ningún mensaje, solo un resultado vacío.

Pruébalo

Sin categoría

Muestra el nombre y el precio de los productos que no tienen categoría. En el campo ya hay un intento. Ejecútalo y corrígelo.

SQLbase de datos: tienda

Pruébalo

Todos los que no son de Sofía

Corrige la consulta del principio de la lección: todos los clientes que no son de Sofía, incluidos los que no tienen ciudad.

SQLbase de datos: tienda

Míralo

NOT IN y un NULL

Una lista NOT IN con un NULL dentro devuelve un resultado vacío:

SQLbase de datos: tienda

¿Por qué? city NOT IN ('Sofía', NULL) significa city <> 'Sofía' AND city <> NULL. La segunda parte es siempre «desconocido», así que la condición completa nunca es verdadera.

Rara vez escribirás NULL a mano en una lista. Pero cuando la lista viene de otra consulta y trae un NULL, obtienes un informe vacío sin ningún error. Lo volveremos a encontrar con las subconsultas.

Ejercicio

Los productos con categoría

Muestra el nombre y la categoría de todos los productos que tienen categoría.

SQLbase de datos: tienda

Test

Ponte a prueba

1. ¿Qué es NULL?
2. ¿Cuál es el resultado de NULL = NULL?
3. ¿Cuál encuentra los productos sin categoría?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·