16-10-2026

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;
En MySQL, el comportamiento por defecto coloca los "NULL" al principio en orden ascendente y al final en orden descendente; las cláusulas "NULLS FIRST/LAST" están disponibles a partir de versiones recientes o mediante técnicas alternativas.

NULL en la cláusula WHERE

La comparación directa con el operador de igualdad no funciona:

-- Incorrecto
WHERE phone = NULL;
La forma correcta es utilizar el operador específico:

- 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 -- UNKNOWN

Tabla 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()".