NULL es la representación que utiliza MySQL para indicar valores que no están asignados.
Se utiliza NULL para mostrar de manera explícita que el valor no está asignado y evitar la confusión de que se asignó una cadena de texto vacía.
Para poder seleccionar o excluir los registros que no tengan valores asignados en una columna no podemos utilizar los operadores de comparación que conocemos. En este caso tenemos que utilizar:
IS NULL: Selecciona los registros que, en la columna utilizada para buscar un valor, no tienen un valor asignado.
-- Selecciona todos los datos de la tabla usuarios
-- cuyo valor en la columna rol_id:
-- es desconocido,
-- es NULL,
-- no está asignado.
SELECT * FROM usuarios WHERE rol_id IS NULL;
IS NOT NULL: Selecciona los registros que, en la columna utilizada para buscar un valor, tienen un valor asignado sin importar cuál es el valor.
-- Selecciona todos los datos de la tabla usuarios
-- cuyo valor en la columna rol_id:
-- es conocido,
-- no es NULL,
-- está asignado.
-- En este caso no importa el valor puede ser 1,2,3...200...n.
SELECT * FROM usuarios WHERE rol_id IS NOT NULL;
Si se realizan consultas en columnas que acepten valores nulos y se utiliza un operador de comparación de los que hemos utilizado lo más probable es que ciertos registros no se muestren – los que no tienen valor asignado * – porque no van a cumplen con el criterio de la consulta.
-- Seleccionar todos los datos de la tabla usuarios
-- donde el valor de la columna rol_id sea igual a 1
SELECT * FROM usuarios WHERE rol_id = 1;
-- Seleccionar todos los datos de la tabla usuarios
-- donde el valor de la columna rol_id sea mayor que 1
SELECT * FROM usuarios WHERE rol_id > 1;
* Un valor desconocido no puede ser igual, diferente, mayor, menor, parecido o estar dentro de un rango de valores.
Nota:
Si queremos evitar que se almacenen registros con valores desconocidos – NULL – en las columnas, tenemos que utilizar NOT NULL en la definición de cada columna al momento de definir la tabla.
Además de asignar NOT NULL a la definición de las columnas, tenemos que utilizar MYSQL en en modo estricto.
Si tenemos una columna definida con NOT NULL y MySQL no está en modo estricto, al momento de crear un registro, se le va a asignar un valor que corresponda al tipo de dato elegido para la columna.
Tipo de Dato | Valor asignado |
Entero | 0 |
float(10,2) | 0.00 |
char / varchar | Cadena vacía de texto – “” |
datetime / timestamp | 0000-00-00 00:00:00 |
Nota:
Aunque al trabajar con aplicaciones web – que utilizan un navegador web – se pueden validar los datos dos veces – en el navegador y en el lenguaje de programación del lado del servidor – es recomendable revisar la definición de las tablas y el modo en el que se ejecuta MySQL.