NULL

Categories:

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.