- 1 1. Introducción
- 2 2. Lo básico de NULL
- 3 3. Métodos de operación con NULL
- 4 4. Búsqueda de datos que incluyen NULL
- 5 5. NULL y rendimiento de índices
- 6 6. NULL y ordenación
- 7 7. Funciones útiles relacionadas con NULL
- 8 8. Mejores prácticas al manejar NULL
- 9 9. Preguntas frecuentes (FAQ)
- 9.1 Q1: ¿Cuál es la diferencia entre NULL, cadena vacía (“”) y cero (0)?
- 9.2 Q2: ¿Por qué el resultado deNULL = NULL no es TRUE?
- 9.3 Q3: ¿Qué puntos hay que tener en cuenta al buscar datos que incluyen NULL?
- 9.4 Q4: ¿Hay puntos a tener en cuenta en la relación entre NULL e índices?
- 9.5 Q5: ¿Cuál es la diferencia entre las funciones COALESCE e IFNULL?
- 9.6 Q6: ¿Hay trucos de diseño de base de datos para evitar NULL?
- 9.7 Q7: ¿NULL afecta los resultados de las funciones de agregación?
- 9.8 Q8: ¿Pueden surgir problemas en JOIN con datos que incluyen NULL?
- 9.9 Resumen
- 10 10. Resumen
1. Introducción
MySQL es un sistema de gestión de bases de datos utilizado en muchas aplicaciones y sistemas. Dentro de él, el concepto de «NULL» es uno de los temas difíciles de entender para los principiantes. Comprender con precisión qué es «NULL» y cómo manejarlo es extremadamente importante para utilizar MySQL de manera efectiva.
En este artículo, explicaremos de manera exhaustiva desde la definición básica de NULL en MySQL, los métodos de operación, los métodos de búsqueda, las funciones útiles relacionadas con NULL, y los puntos a tener en cuenta. Además, hemos preparado una sección de FAQ que responde a las dudas comunes sobre NULL.
El público objetivo de este artículo son personas como las siguientes.
- Principiantes que usan MySQL por primera vez
- Usuarios intermedios que entienden los básicos de SQL y quieren aprender más en profundidad
- Ingenieros involucrados en el diseño y operación de bases de datos
Al finalizar la lectura de este artículo, podrá adquirir las siguientes habilidades.
- Entender correctamente qué es NULL
- Operar y buscar datos que incluyen NULL
- Aprender mejores prácticas para evitar problemas relacionados con NULL
Entonces, procedamos a explicar paso a paso desde el conocimiento básico de NULL.
2. Lo básico de NULL
Al manejar bases de datos, el concepto de «NULL» es extremadamente importante. Sin embargo, NULL también es uno de los elementos que se malinterpretan fácilmente. En esta sección, explicaremos en detalle la definición básica y las características de NULL.
Definición de NULL
NULL indica un estado especial que representa «el valor no existe» o «valor desconocido». Esto es diferente de una cadena vacía (“”) o cero (0). A continuación se muestran ejemplos de las diferencias.
- NULL: El valor no existe (estado indefinido)
- Cadena vacía (“”): El valor existe, pero su contenido está vacío
- Cero (0): El valor existe y es «0»
Características de NULL
- Manejo de NULL en operaciones de comparación
En SQL, NULL se maneja con reglas especiales. Por ejemplo, es necesario prestar atención a los resultados de operaciones de comparación como las siguientes.
SELECT NULL = NULL; -- Resultado: NULL
SELECT NULL <> NULL; -- Resultado: NULL
SELECT NULL IS NULL; -- Resultado: TRUE
- Incluso comparando NULL con operaciones de comparación normales (=, <, > etc.) el resultado es NULL.
- Para evaluar NULL correctamente, es necesario usar
IS NULL
oIS NOT NULL
.
- NULL en operaciones aritméticas
Las operaciones aritméticas que incluyen NULL siempre devuelven NULL.
Ejemplo:
SELECT 10 + NULL; -- Resultado: NULL
SELECT NULL * 5; -- Resultado: NULL
- Operaciones lógicas con NULL
El resultado de expresiones condicionales que incluyen NULL también es NULL. Veamos los siguientes ejemplos.
SELECT NULL AND TRUE; -- Resultado: NULL
SELECT NULL OR FALSE; -- Resultado: NULL
NULL y causas de problemas
Si no se maneja NULL correctamente, pueden ocurrir problemas como los siguientes.
- Resultados de búsqueda no intencionados
Por ejemplo, en la siguiente consulta, los datos dondeage
es NULL se excluyen.
SELECT * FROM users WHERE age > 20;
Como solución, es necesario incluir NULL en la condición:
SELECT * FROM users WHERE age > 20 OR age IS NULL;
- Errores de cálculo o malentendidos de datos en blanco
Las funciones de agregación (SUM, AVG etc.) ignoran NULL en los cálculos. Por lo tanto, en conjuntos de datos con muchos NULL, pueden obtenerse resultados no intencionados.
Resumen de las reglas básicas de NULL
- NULL representa el estado en que «el valor no existe».
- Dado que no se puede manejar correctamente con operaciones de comparación normales, usar
IS NULL
oIS NOT NULL
. - En operaciones aritméticas o lógicas que incluyen NULL, el resultado también es NULL.
3. Métodos de operación con NULL
Al manejar NULL en MySQL, es necesario entender los métodos de operación apropiados. En esta sección, explicamos en detalle los métodos específicos de operación con NULL en la inserción, actualización y eliminación de datos.
Método para especificar NULL al insertar datos
Al insertar un nuevo registro en la base de datos, es posible establecer NULL en una columna. A continuación, se muestra un ejemplo concreto.
- Especificar NULL explícitamente
INSERT INTO users (name, age) VALUES ('Taro', NULL);
En esta consulta, se inserta NULL en la columna age
sin establecer un valor.
- NULL como valor predeterminado
Si NULL está configurado como valor predeterminado, al no especificar un valor, se inserta automáticamente NULL.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT DEFAULT NULL
);
INSERT INTO users (name) VALUES ('Hanako');
En este ejemplo, como no se especifica un valor explícito en la columna age
, se inserta el valor predeterminado NULL.
Método para establecer NULL al actualizar datos
Al actualizar datos existentes, también es posible establecer el valor de una columna en NULL. A continuación, se muestra un ejemplo concreto.
- Actualizar el valor a NULL
UPDATE users SET age = NULL WHERE name = 'Taro';
Esta consulta establece la columna age
en NULL para el registro cuyo nombre es “Taro”.
- Actualización basada en condiciones
También es posible agregar condiciones para establecer NULL en situaciones específicas.
UPDATE users SET age = NULL WHERE age < 18;
Aquí, se establece la columna age
en NULL para todos los registros cuya edad es menor a 18.
Método para especificar NULL como condición al eliminar datos
Al eliminar datos que contienen NULL, es necesario incluir NULL en la condición. En lugar de usar operadores de comparación, se utiliza IS NULL
.
- Eliminación con NULL como condición
DELETE FROM users WHERE age IS NULL;
Esta consulta elimina los registros donde la columna age
es NULL.
- Eliminación de NULL con múltiples condiciones
DELETE FROM users WHERE age IS NULL AND name = 'Taro';
En este ejemplo, solo se eliminan los registros donde age
es NULL y name
es “Taro”.
Precauciones al operar con NULL
- Usar
IS NULL
correctamente
Al especificar NULL como condición, siempre useIS NULL
oIS NOT NULL
en lugar del operador=
.
SELECT * FROM users WHERE age = NULL; -- Incorrecto
SELECT * FROM users WHERE age IS NULL; -- Correcto
- Diseño de aplicaciones consciente del manejo de NULL
Al operar datos desde una aplicación, prestar atención al manejo de NULL puede prevenir comportamientos no deseados. - Aprovechamiento de transacciones
En operaciones de datos que involucran NULL, considere usar transacciones para evitar cambios de datos no intencionales.
4. Búsqueda de datos que incluyen NULL
Al buscar datos en MySQL, es extremadamente importante manejar NULL correctamente. Dado que NULL es diferente de los valores normales, se requiere una atención especial. En esta sección, explicaremos cómo buscar datos que incluyen NULL de manera eficiente.
Métodos básicos para buscar NULL
Al buscar NULL, utilice IS NULL
o IS NOT NULL
en lugar de los operadores de comparación normales (=, <, >).
- Búsqueda de NULL
SELECT * FROM users WHERE age IS NULL;
Esta consulta obtiene todos los registros donde la columna age
es NULL.
- Búsqueda de valores distintos de NULL
SELECT * FROM users WHERE age IS NOT NULL;
Esta consulta obtiene todos los registros donde la columna age
no es NULL.
Búsqueda con condiciones complejas que incluyen NULL
Dado que NULL no se maneja correctamente con los operadores de comparación, es necesario tener precaución al usarlo en expresiones de condiciones complejas.
- Caso de incluir NULL en la expresión de condición
SELECT * FROM users WHERE age > 20 OR age IS NULL;
Esta consulta obtiene los registros donde age
es mayor que 20 o es NULL.
- Operador NOT y NULL
SELECT * FROM users WHERE NOT (age > 20 OR age IS NULL);
Esta consulta obtiene los registros donde age
es 20 o menos, y no es NULL.
Uso de NULL y el operador LIKE
El operador LIKE
no se puede usar con NULL. Dado que NULL indica la ausencia de un valor, la siguiente consulta no devuelve resultados:
SELECT * FROM users WHERE name LIKE '%a%';
-- Los valores NULL no se buscan con esta condición
En su lugar, es necesario agregar una verificación de NULL:
SELECT * FROM users WHERE name LIKE '%a%' OR name IS NULL;
Funciones de agregación y búsqueda de NULL
NULL se ignora en muchas funciones de agregación (como SUM, AVG, etc.). Por lo tanto, es necesario considerar NULL para obtener resultados correctos.
- Función COUNT
SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
COUNT(*)
: Cuenta todos los registros, incluidos los NULLCOUNT(column)
: Cuenta los registros excluyendo los NULL- Otras funciones de agregación
SELECT AVG(age) AS average_age FROM users WHERE age IS NOT NULL;
Calcula el valor promedio excluyendo los NULL.
Precauciones al buscar NULL
- Diferencia entre
IS NULL
y=
Dado que NULL no se puede manejar con comparaciones normales, siempre utiliceIS NULL
oIS NOT NULL
.
SELECT * FROM users WHERE age = NULL; -- Incorrecto
SELECT * FROM users WHERE age IS NULL; -- Correcto
- Consideraciones en condiciones múltiples
Si se incluye NULL, si no se agrega explícitamente NULL a la expresión de condición, se pueden producir resultados no deseados.
SELECT * FROM users WHERE age > 20; -- Excluye NULL
SELECT * FROM users WHERE age > 20 OR age IS NULL; -- Incluye NULL
- Impacto en el rendimiento
Al incluir NULL en las condiciones, el uso de índices puede estar restringido en algunos casos. Se recomienda verificar la efectividad de los índices.
EXPLAIN SELECT * FROM users WHERE age IS NULL;
Resumen
Buscar NULL correctamente es extremadamente importante para obtener los resultados esperados. Al buscar datos que incluyen NULL, utilice IS NULL
o IS NOT NULL
de manera adecuada y considere el impacto en el rendimiento y los índices.
5. NULL y rendimiento de índices
Para optimizar el rendimiento de la base de datos, el uso de índices es indispensable. Sin embargo, en las operaciones sobre columnas que contienen NULL, puede afectar la eficiencia de los índices. En esta sección, se explica la relación entre NULL e índices, el impacto en el rendimiento y los puntos de optimización.
Configuración de índices en columnas que contienen NULL
En MySQL, se pueden configurar índices también en columnas que contienen NULL. Por ejemplo, se puede crear un índice con SQL como el siguiente.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50),
age INT,
INDEX (age)
);
En este caso, incluso si la columna age
contiene NULL, el índice es efectivo.
Uso de índices con IS NULL o IS NOT NULL
En búsquedas que incluyen NULL como condición, el índice puede aplicarse o no.
- Caso en que se aplica el índice
SELECT * FROM users WHERE age IS NULL;
En esta consulta, se aprovecha el índice y se realiza una búsqueda eficiente.
- Caso en que no se aplica el índice
Si se usan condiciones complejas como la siguiente, el índice puede no aplicarse.
SELECT * FROM users WHERE age + 1 IS NULL;
La aplicación del índice depende de las condiciones de la consulta.
NULL y índices compuestos
Aunque se configure un índice compuesto, las columnas que contienen NULL reciben un tratamiento especial.
- Ejemplo de índice compuesto
CREATE TABLE employees (
id INT AUTO_INCREMENT PRIMARY KEY,
department_id INT,
salary INT,
INDEX (department_id, salary)
);
En este caso, si department_id
es NULL, parte del índice compuesto department_id, salary
puede no ser utilizable.
Impacto de NULL en el rendimiento
- Eficacia de los índices
- En búsquedas que incluyen NULL como condición, los índices suelen funcionar de manera eficiente. Sin embargo, si las expresiones condicionales son complejas, el uso del índice puede estar restringido.
- Precauciones cuando hay gran cantidad de datos
- Si se configura un índice en una columna con muchos NULL, el tamaño del índice aumenta, lo que puede degradar el rendimiento de las consultas.
- Diseño para evitar NULL
- En columnas que frecuentemente contienen NULL, establecer valores predeterminados para reducir el uso de NULL puede contribuir a mejorar el rendimiento.
Puntos de optimización del rendimiento
- Uso adecuado de índices
Para verificar si se está aplicando un índice, useEXPLAIN
.
EXPLAIN SELECT * FROM users WHERE age IS NULL;
- Diseño para minimizar NULL
Al establecer la restricciónNOT NULL
en las columnas y usar valores predeterminados, se realiza un diseño de datos que evita NULL:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
age INT NOT NULL DEFAULT 0
);
- Reevaluación de índices
Según la cantidad de datos y los patrones de búsqueda, agregue o elimine índices para optimizar.
Resumen
NULL puede coexistir con los índices, pero bajo ciertas condiciones puede afectar el rendimiento. Al definir claramente el diseño de índices y las directrices de uso de NULL, se pueden realizar operaciones de base de datos eficientes.
6. NULL y ordenación
Al ordenar datos en MySQL, es importante entender correctamente cómo se maneja NULL. Dado que NULL es diferente de los valores normales, conocer el orden de clasificación predeterminado y los métodos de personalización permite obtener los resultados esperados. En esta sección, explicamos las reglas básicas relacionadas con la clasificación de NULL y métodos de operación avanzados.
Orden de clasificación predeterminado de NULL
En MySQL, NULL se maneja de la siguiente manera.
- Orden ascendente (ASC): NULL se coloca al principio.
- Orden descendente (DESC): NULL se coloca al final.
Ejemplo específico:
SELECT * FROM users ORDER BY age ASC;
-- NULL se coloca al principio
SELECT * FROM users ORDER BY age DESC;
-- NULL se coloca al final
Método para colocar NULL en un orden especificado
Es posible cambiar el orden de clasificación predeterminado para forzar la colocación de NULL al principio o al final.
- Colocar NULL al principio
SELECT * FROM users ORDER BY age IS NULL DESC, age ASC;
En esta consulta, los registros donde age
es NULL se colocan al principio, seguidos de los registros con valores en orden ascendente.
- Colocar NULL al final
SELECT * FROM users ORDER BY age IS NULL ASC, age ASC;
En esta consulta, los valores que no son NULL se colocan primero, y NULL se coloca al final.
Manejo de NULL en la ordenación de múltiples columnas
Al ordenar por múltiples columnas, se puede especificar el manejo de NULL para cada columna.
- Ordenación con múltiples condiciones
SELECT * FROM users ORDER BY department_id ASC, age IS NULL DESC, age ASC;
En esta consulta, los datos se ordenan en el siguiente orden:
- Orden ascendente de
department_id
- Registros donde
age
es NULL - Orden ascendente de registros donde
age
no es NULL
Rendimiento de la ordenación y NULL
Al ordenar por columnas que contienen NULL, si se aplica un índice depende de las condiciones de la consulta. Si no se aplica un índice, el proceso de ordenación puede tardar más tiempo.
- Confirmación de la aplicación de índices
EXPLAIN SELECT * FROM users ORDER BY age ASC;
Se recomienda usar EXPLAIN
para confirmar si se está aplicando un índice.
Puntos de atención al ordenar
- Considerar el tipo de datos de la columna
- Si el tipo de datos de una columna que contiene NULL no es adecuado, pueden ocurrir resultados inesperados. Preste especial atención a las diferencias entre tipos numéricos y de cadena.
- Clarificar las condiciones de ordenación
- Para que los resultados de la consulta sean claros, utilice
IS NULL
oIS NOT NULL
para manejar NULL de manera explícita.
SELECT * FROM users WHERE age IS NULL ORDER BY age DESC;
Resumen
NULL se coloca al principio en orden ascendente y al final en orden descendente por defecto, pero es posible personalizarlo en la consulta. Al especificar condiciones adecuadas, se puede lograr el orden deseado.

7. Funciones útiles relacionadas con NULL
MySQL tiene varias funciones útiles preparadas para manejar NULL de manera eficiente. Al utilizar estas funciones, el procesamiento de datos y la descripción de consultas que consideran la existencia de NULL se vuelven más simples. En esta sección, explicaremos las funciones representativas y su uso.
Función COALESCE
COALESCE es una función que devuelve el primer valor no NULL de los argumentos especificados. Es útil para reemplazar NULL con un valor predeterminado.
- Sintaxis básica
COALESCE(value1, value2, ..., valueN)
- Ejemplo de uso
SELECT COALESCE(age, 0) AS adjusted_age FROM users;
En esta consulta, si age
es NULL, devuelve 0
; de lo contrario, devuelve ese valor.
- Ejemplo con múltiples argumentos
SELECT COALESCE(NULL, NULL, 'valor predeterminado', 'otro valor') AS result;
El resultado será «valor predeterminado».
Función IFNULL
IFNULL devuelve un valor especificado en lugar de NULL. Es similar a la función COALESCE, pero está limitada a dos argumentos.
- Sintaxis básica
IFNULL(expression, alternate_value)
- Ejemplo de uso
SELECT IFNULL(age, 0) AS adjusted_age FROM users;
Si age
es NULL, devuelve 0
.
- Diferencia con COALESCE
- IFNULL solo maneja dos argumentos, mientras que COALESCE puede manejar múltiples argumentos.
Operador de igualdad segura para NULL (<=>)
<=> es un operador para comparar valores NULL de manera segura. Al usar este operador, es posible comparar NULL entre sí.
- Ejemplo de uso
SELECT * FROM users WHERE age <=> NULL;
Esta consulta busca con precisión los registros donde age
es NULL.
- Diferencia con el operador de comparación normal (=)
- Con el operador
=
, el resultado deNULL = NULL
es NULL, pero con el operador<=>
, es TRUE.
Función ISNULL
ISNULL determina si un valor es NULL. Normalmente, IS NULL
o IS NOT NULL
son suficientes, pero se usa cuando se necesita una determinación como función.
- Sintaxis básica
ISNULL(expression)
- Ejemplo de uso
SELECT ISNULL(age) AS is_null FROM users;
Si age
es NULL, devuelve 1
; de lo contrario, devuelve 0
.
Función NULLIF
NULLIF devuelve NULL si dos argumentos son iguales; de lo contrario, devuelve el primer argumento.
- Sintaxis básica
NULLIF(expression1, expression2)
- Ejemplo de uso
SELECT NULLIF(salary, 0) AS adjusted_salary FROM employees;
Si salary
es 0
, devuelve NULL; de lo contrario, devuelve el valor de salary
.
Cómo elegir la función NULL
- Si se desea establecer un valor predeterminado: Usar COALESCE o IFNULL
- Si se desea realizar una comparación de NULL de manera segura: Usar el operador <=>
- Si se desea determinar explícitamente NULL: Usar ISNULL o IS NULL
- Si se desea devolver NULL bajo una condición específica: Usar NULLIF
Resumen
MySQL tiene una amplia variedad de funciones útiles para manejar NULL. Al seleccionar la función adecuada, es posible describir consultas de manera simple y eficiente. Aprovechemos estas funciones para optimizar el procesamiento relacionado con NULL.
8. Mejores prácticas al manejar NULL
NULL juega un papel importante en las operaciones de base de datos, pero debido a sus características, puede causar malentendidos o problemas. Al manejar NULL correctamente, es posible mantener la integridad de los datos mientras se logra una operación eficiente. En esta sección, se explican las mejores prácticas para manejar NULL.
Manejo de NULL en el diseño de la base de datos
- Decisión sobre si permitir NULL
- NULL indica el estado «sin valor», pero no es necesario permitir NULL en todas las columnas.
- Ejemplo:
- En campos obligatorios (ej.: nombre de usuario, dirección de correo electrónico), establecer la restricción
NOT NULL
. - En campos donde es posible que no exista un valor (ej.: puntaje intermedio, configuraciones opcionales), permitir NULL.
- En campos obligatorios (ej.: nombre de usuario, dirección de correo electrónico), establecer la restricción
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
age INT NULL
);
- Establecimiento de valores predeterminados
- Para minimizar el uso de NULL, es efectivo establecer valores predeterminados apropiados.
CREATE TABLE orders (
id INT AUTO_INCREMENT PRIMARY KEY,
status VARCHAR(20) NOT NULL DEFAULT 'pending'
);
Gestión de NULL en el lado de la aplicación
- Validación en la entrada de datos
- Al enviar datos a través de formularios de entrada del usuario, verificar si se han ingresado valores en los campos obligatorios.
- Agregar validación en el lado del servidor para prevenir inserciones de NULL no autorizadas en la base de datos.
- Procesamiento unificado de NULL
- Mantener consistencia en el procesamiento de NULL en todo el código de la aplicación.
- Ejemplo: Preparar una función auxiliar para convertir NULL a un valor predeterminado.
def handle_null(value, default):
return value if value is not None else default
Precauciones al crear consultas
- Comparación segura de NULL
- Al comparar NULL, siempre usar
IS NULL
oIS NOT NULL
.
SELECT * FROM users WHERE age IS NULL;
- Manejo de NULL en expresiones condicionales complejas
- En consultas con múltiples condiciones, aclarar el manejo de NULL.
SELECT * FROM users WHERE age > 20 OR age IS NULL;
- Consideración de resultados de agregación que incluyen NULL
- Las funciones de agregación (SUM, AVG, etc.) ignoran NULL en los cálculos. Sin embargo, si se desea confirmar el número de NULL, es necesario agregar condiciones adicionales.
SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_records FROM users;
Diseño para mejorar el rendimiento y la legibilidad
- Índices y NULL
- Al usar índices en columnas con muchos NULL, verificar la eficiencia del índice.
- Reconstruir el índice según sea necesario.
- Minimización de NULL
- En la etapa de diseño, limitar NULL al mínimo necesario para mejorar la legibilidad y el rendimiento de la base de datos.
- En su lugar, usar valores predeterminados específicos o banderas.
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
age INT NOT NULL DEFAULT 0
);
Problemas comunes en el sitio y cómo evitarlos
- Problema: Resultados de búsqueda no intencionados debido a NULL
- Solución: Usar
IS NULL
oIS NOT NULL
de manera apropiada en las consultas.
SELECT * FROM users WHERE name = 'Taro' OR name IS NULL;
- Problema: Comportamiento inesperado de las funciones de agregación
- Solución: Agregar condiciones para excluir NULL.
SELECT COUNT(age) FROM users WHERE age IS NOT NULL;
- Problema: NULL y integridad de datos
- Solución: Aplicar exhaustivamente restricciones
NOT NULL
a nivel de base de datos y validaciones en el lado de la aplicación.
Resumen
NULL es un concepto muy conveniente, pero si no se maneja adecuadamente, puede causar problemas. Al aclarar las políticas en el diseño de la base de datos y realizar una gestión consistente en la aplicación, es posible minimizar los problemas relacionados con NULL.
9. Preguntas frecuentes (FAQ)
Las operaciones y características relacionadas con NULL en MySQL generan muchas dudas tanto para principiantes como para usuarios intermedios. En esta sección, hemos recopilado preguntas frecuentes sobre NULL y sus respuestas.
Q1: ¿Cuál es la diferencia entre NULL, cadena vacía (“”) y cero (0)?
- A1:
- NULL: Indica que no existe un valor (indefinido).
- Cadena vacía (“”): El valor existe, pero su contenido está vacío.
- Cero (0): El valor existe y es el número 0.
- Ejemplo:
sql INSERT INTO users (name, age) VALUES ('Taro', NULL); -- age es NULL INSERT INTO users (name, age) VALUES ('Hanako', ''); -- age es cadena vacía INSERT INTO users (name, age) VALUES ('Jiro', 0); -- age es cero
Q2: ¿Por qué el resultado deNULL = NULL
no es TRUE?
- A2:
- Según la especificación de SQL, NULL significa un «valor desconocido». Comparar valores desconocidos resulta en indefinido (NULL), no en TRUE o FALSE.
- Para comparar NULL, se debe usar
IS NULL
oIS NOT NULL
. - Ejemplo:
sql SELECT NULL = NULL; -- resultado: NULL SELECT NULL IS NULL; -- resultado: TRUE
Q3: ¿Qué puntos hay que tener en cuenta al buscar datos que incluyen NULL?
- A3:
- Al buscar con NULL como condición, usar operadores de comparación (=, <, >, etc.) no produce el resultado esperado. En su lugar, use
IS NULL
oIS NOT NULL
. - Ejemplo:
sql SELECT * FROM users WHERE age = NULL; -- incorrecto SELECT * FROM users WHERE age IS NULL; -- correcto
Q4: ¿Hay puntos a tener en cuenta en la relación entre NULL e índices?
- A4:
- Se puede establecer un índice en columnas que incluyen NULL, pero la eficiencia del índice varía según las condiciones de la consulta.
- En particular, en condiciones complejas (por ejemplo, que incluyen fórmulas de cálculo), el índice puede volverse ineficaz.
- Método para verificar el índice:
sql EXPLAIN SELECT * FROM users WHERE age IS NULL;
Q5: ¿Cuál es la diferencia entre las funciones COALESCE e IFNULL?
- A5:
- COALESCE: Acepta múltiples argumentos y devuelve el primer valor no NULL.
- IFNULL: Acepta solo dos argumentos y devuelve el segundo si el primero es NULL.
- Ejemplo:
sql SELECT COALESCE(NULL, NULL, 'valor predeterminado', 'otro valor'); -- resultado: 'valor predeterminado' SELECT IFNULL(NULL, 'predeterminado'); -- resultado: 'predeterminado'
Q6: ¿Hay trucos de diseño de base de datos para evitar NULL?
- A6:
- Restricción NOT NULL: Agregue restricciones para que los campos obligatorios no acepten NULL.
- Configuración de valores predeterminados: Use valores predeterminados en lugar de NULL.
- Ejemplo:
sql CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, age INT NOT NULL DEFAULT 0 );
Q7: ¿NULL afecta los resultados de las funciones de agregación?
- A7:
- Las funciones de agregación (SUM, AVG, COUNT, etc.) ignoran NULL en los cálculos. Sin embargo, si desea contar el número de NULL, debe agregar condiciones adicionales.
- Ejemplo:
sql SELECT COUNT(*) AS total_records, COUNT(age) AS non_null_ages FROM users;
Q8: ¿Pueden surgir problemas en JOIN con datos que incluyen NULL?
- A8:
- Al realizar JOIN en columnas que incluyen NULL, NULL se considera que no coincide con ningún valor, por lo que puede no obtenerse el resultado esperado.
- Método de solución: Escriba consultas que consideren NULL como condición, o use la función COALESCE para reemplazar NULL con un valor predeterminado.
SELECT *
FROM table1 t1
LEFT JOIN table2 t2 ON COALESCE(t1.key, 0) = COALESCE(t2.key, 0);
Resumen
NULL es un valor que recibe un tratamiento especial en las operaciones de base de datos de MySQL. Refiérase a las FAQ explicadas en esta sección para entender correctamente NULL y aprender a manejarlo de manera eficiente.
10. Resumen
El manejo de NULL en MySQL es una de las habilidades importantes en el diseño y la operación de bases de datos. En este artículo, se ha explicado de manera exhaustiva desde la definición básica de NULL hasta los métodos de operación, búsqueda, ordenación, índices, así como funciones útiles y mejores prácticas.
Repaso de los puntos principales
- Fundamentos y características de NULL
- NULL significa «el valor no existe» o «valor desconocido» y es un valor especial diferente de una cadena vacía (“”) o cero (0).
- En las operaciones de comparación, se debe usar
IS NULL
oIS NOT NULL
para manejar NULL de manera segura.
- Operación y búsqueda de datos que incluyen NULL
- Aprendimos métodos para manejar correctamente NULL en la inserción, actualización, eliminación y búsqueda de datos.
- En particular, al utilizar sintaxis y funciones como
IS NULL
oCOALESCE
, es posible realizar operaciones flexibles y eficientes.
- NULL y rendimiento
- Se explicó el impacto de los índices en columnas que incluyen NULL, así como las consideraciones de diseño de datos para optimizar el rendimiento.
- Al establecer valores predeterminados según sea necesario, se puede minimizar el uso de NULL.
- Funciones útiles para manejar NULL
- Funciones como COALESCE, IFNULL y NULLIF son útiles para resolver problemas relacionados con NULL.
- Para comparaciones seguras, se puede usar el operador
<=>
para evitar comportamientos inesperados.
- Mejores prácticas
- Al diseñar para minimizar el uso de NULL y realizar una validación adecuada en el lado de la aplicación, se mantiene la integridad de los datos.
- Al unificar el procesamiento de NULL en las consultas SQL, se mejora la legibilidad y mantenibilidad del código.
Ventajas de entender NULL
- Operación eficiente de datos: Al manejar NULL con precisión, se evitan errores innecesarios y se permite escribir consultas eficientes.
- Mejora de la integridad de los datos: Al aclarar las directrices de uso de NULL durante el diseño de la base de datos, se logra una gestión de datos con alta integridad.
- Mejora de la confiabilidad de la aplicación: Al procesar NULL adecuadamente en el lado de la aplicación, se previenen comportamientos inesperados y errores.
Pasos siguientes
Para profundizar en la comprensión de NULL, se recomienda lo siguiente:
- Verificar el uso de NULL en su propio proyecto e identificar puntos de mejora.
- Probar funciones y operadores como
IS NULL
,COALESCE
eIFNULL
con conjuntos de datos reales. - Realizar un ajuste adicional en cuanto a índices y rendimiento.
A través de este artículo, debería haber profundizado su conocimiento sobre NULL en MySQL y adquirido habilidades prácticas. Utilícelo para avanzar de manera más eficiente en la operación de bases de datos y el desarrollo de aplicaciones.