Manejo de null en MySQL: guía completa
IS NULL
Permite localizar filas en las que una columna contiene el valor NULL.SELECT *
FROM users
WHERE phone IS NULL;IS NOT NULL
Identifica las filas en las que una columna contiene un valor distinto de "NULL".SELECT *
FROM users
WHERE phone IS NOT NULL;COALESCE()
Devuelve el primer valor no NULL de la lista de expresiones proporcionada. Es útil para establecer valores por defecto y admite múltiples alternativas.SELECT name,
COALESCE(phone, 'No disponible') AS phone
FROM users;
Ejemplo con varios valores de respaldo:COALESCE(phone, email, 'Sin contacto')NULLIF()
Devuelve NULL cuando dos expresiones son iguales; en caso contrario, devuelve la primera expresión. Resulta especialmente útil para evitar divisiones por cero.SELECT NULLIF(discount, 0)
FROM products;
SELECT sales / NULLIF(quantity, 0)
FROM products;IFNULL()
Función específica de MySQL que sustituye un valor "NULL" por otro valor indicado.SELECT IFNULL(phone, 'No disponible')
FROM users;CASE WHEN
Permite implementar lógica personalizada para el tratamiento de valores "NULL".SELECT name,
CASE
WHEN phone IS NULL THEN 'Faltante'
ELSE 'Disponible'
END AS phone_status
FROM users;COUNT() y valores NULL
"COUNT(columna)" ignora los valores "NULL", mientras que "COUNT(*)" cuenta todas las filas, independientemente de si contienen "NULL" o no.SELECT COUNT(phone) AS non_null_count,
COUNT(*) AS total_count
FROM users;Funciones de agregación y NULL
La mayoría de las funciones de agregación, como "AVG", "SUM", "MIN<", "MAX", etc. ignoran los valores "NULL".SELECT AVG(salary) AS avg_salary,
SUM(salary) AS total_salary,
MIN(salary) AS min_salary,
MAX(salary) AS max_salary
FROM employees;ORDER BY con NULL
Es posible controlar la posición de los valores "NULL" en el resultado ordenado mediante las cláusulas "NULLS FIRST" o "NULLS LAST", cuando el motor lo soporta.SELECT *
FROM employees
ORDER BY salary NULLS LAST;NULL en la cláusula WHERE
La comparación directa con el operador de igualdad no funciona:-- Incorrecto
WHERE phone = NULL;- Correcto
WHERE phone IS NULL;<div>
</section>
<section>
<h2>12. NULL en sentencias UPDATE</h2>
<p>Permite asignar el valor NULL a una columna.</p>
<div class="code" itemscope itemtype="https://schema.org/SoftwareSourceCode"><pre><code itemprop="text">UPDATE users
SET phone = NULL
WHERE id = 10;NULL en sentencias INSERT
Es posible insertar explícitamente el valor "NULL".INSERT INTO users (name, phone)
VALUES ('Manuel, NULL);NULL en operaciones JOIN
La expresión "NULL = NULL" no evalúa a verdadero. Cuando se requiere tratar dos valores "NULL" como coincidentes, se debe añadir una condición especial.ON a.value = b.value
OR (a.value IS NULL AND b.value IS NULL)Lógica de tres valores
Las comparaciones que involucran "NULL" devuelven el resultado "UNKNOWN", desconocido, no "TRUE" ni "FALSE".NULL = NULL -- UNKNOWN
NULL <> 10 -- UNKNOWN
NULL > 10 -- UNKNOWN
NULL < 10 -- UNKNOWNTabla de referencia rápida
| Método | Propósito |
|---|---|
| "IS NULL" | Localizar valores NULL |
| "IS NOT NULL" | Localizar valores no NULL |
| "COALESCE()" | Devolver el primer valor no NULL |
| "NULLIF()" | Convertir un valor coincidente en NULL |
| "IFNULL()" | Sustituir NULL (MySQL / SQLite) |
| "CASE" | Lógica personalizada para NULL |
| "COUNT(columna)" | Contar valores no NULL |
| "COUNT(*)" | Contar todas las filas |
| "NULLS FIRST / NULLS LAST" | Controlar el orden de los NULL |
Conclusiones clave
- "NULL" no es cero, no es una cadena vacía y no es igual a ningún otro valor, incluido otro "NULL".
- Se debe utilizar "IS NULL" o "IS NOT NULL" en lugar del operador de igualdad, "=".
- La función adecuada depende del sistema de gestión de bases de datos: en
MySQL se recomienda "IFNULL()" o "COALESCE()".