Hoy vamos a seguir aprendiendo sobre NULL, el héroe invisible de las bases de datos. Si todavía piensas que NULL es simplemente "nada", tienes razón, pero no del todo. En esta lección vamos a aprender cómo comprobar si hay NULL en nuestros datos y qué hacer con ello. ¿Listo para rastrear la ausencia de valores?
Vamos a empezar con algo sencillo: imagina que trabajas con la base de datos de una tienda online. Tienes una tabla de pedidos donde para algunos pedidos no se añadió información en los comentarios, y en otros sí hay notas. Si quieres buscar todos los pedidos con comentarios vacíos y usas comparaciones normales como = o <>, te vas a sorprender... ¿Por qué? ¡Porque NULL es un caso especial!
En SQL, para comprobar si hay o no NULL usamos IS NULL y IS NOT NULL. Estos operadores nos ayudan a entender NULL y conseguir los datos que necesitamos.
Comprobando valores con IS NULL
IS NULL se usa para ver si una columna o expresión tiene el valor NULL.
SELECT *
FROM orders
WHERE comment IS NULL;
Esta consulta devuelve todas las filas donde el valor de la columna comment es NULL. Es útil si quieres encontrar pedidos sin comentarios.
Aquí tienes un ejemplo de la tabla orders:
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Entrega urgente" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Consulta:
SELECT id, customer_name
FROM orders
WHERE comment IS NULL;
Resultado:
| id | customer_name |
|---|---|
| 2 | Maria Chi |
| 4 | Anna Song |
Fíjate que las filas con la cadena vacía '' no están incluidas, porque '' no es NULL.
Comprobando valores con IS NOT NULL
IS NOT NULL funciona al revés: comprueba si el valor no es NULL. Por ejemplo, si quieres ver todos los pedidos con comentarios:
SELECT *
FROM orders
WHERE comment IS NOT NULL;
Esta consulta solo devuelve las filas donde la columna comment tiene datos (incluyendo cadenas vacías '').
Ejemplo
La tabla orders sigue igual.
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Entrega urgente" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Ejecutamos la consulta:
SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;
Resultado:
| id | customer_name | comment |
|---|---|---|
| 1 | Otto Art | "Entrega urgente" |
| 3 | Alex Lin | '' |
Ojo, la fila con la cadena vacía '' sí está incluida. SQL considera este valor como "no vacío".
¿Cuándo usar IS NULL y IS NOT NULL?
Aquí tienes algunos casos:
- Filtrado de datos: quieres excluir registros incompletos donde faltan valores.
- Manejo de errores: a veces
NULLpuede significar un error de entrada de datos y necesitas aislar esas filas. - Análisis de datos: contar cuántos registros tienen valores ausentes ayuda a entender la calidad de los datos.
Aplicación práctica
Vamos a probar algunos ejercicios prácticos:
Ejercicio 1: Seleccionar estudiantes sin fecha de nacimiento indicada
Supón que tienes una tabla students:
| id | name | birth_date |
|---|---|---|
| 1 | Otto Art | 2000-05-10 |
| 2 | Maria Chi | NULL |
| 3 | Alex Lin | 1998-12-30 |
| 4 | Anna Song | NULL |
Consulta:
SELECT name
FROM students
WHERE birth_date IS NULL;
Resultado:
| name |
|---|
| Maria Chi |
| Anna Song |
Esta consulta es útil para buscar estudiantes a los que hay que pedir la fecha de nacimiento.
Ejercicio 2: Seleccionar pedidos con comentarios
| id | customer_name | total_amount | comment |
|---|---|---|---|
| 1 | Otto Art | 1500 | "Entrega urgente" |
| 2 | Maria Chi | 3000 | NULL |
| 3 | Alex Lin | 2000 | '' |
| 4 | Anna Song | 5000 | NULL |
Para la tabla orders podemos encontrar los pedidos con comentarios rellenados:
SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;
Resultado:
| customer_name | comment |
|---|---|
| Otto Art | "Entrega urgente" |
| Alex Lin | '' |
Comparación con operadores normales
Ahora vamos a dar un paso al lado y probar una consulta "errónea" para comprobar NULL:
SELECT *
FROM orders
WHERE comment = NULL;
¿Sorprendido? La consulta no devuelve ninguna fila, ni siquiera aquellas donde comment es claramente NULL. Esto es porque no puedes comparar NULL usando operadores estándar. Para este tipo de comparación, tienes que usar IS NULL.
GO TO FULL VERSION