NULL en SQL

NULL en SQL, así como en la programación en general, significa literalmente «nada». En SQL, es más fácil de entender como «la ausencia de cualquier valor».

Es importante distinguirlo de valores aparentemente vacíos, como la cadena vacía ''o el número 0, ninguno de los cuales es realmente NULL.

También es importante tener cuidado de no encerrar NULL entre comillas, como 'NULL', que está permitido en columnas que aceptan texto, pero no lo está NULL y puede causar errores y conjuntos de datos incorrectos.

Filtrado de NULL en las consultas

La sintaxis para filtrar NULL (es decir, la ausencia de un valor) en bloques WHERE es ligeramente diferente a filtrar valores específicos.

SELECT * FROM Employees WHERE ManagerId IS NULL ;
SELECT * FROM Employees WHERE ManagerId IS NOT NULL ;

Tenga en cuenta que debido a que NULL no es igual a nada, ni siquiera a sí mismo, el uso de operadores de igualdad = NULL<> NULL (o != NULL) siempre arrojará el valor de verdad UNKNOWN que será rechazado por WHERE.

WHERE filtra todas las filas en las que la condición es FALSEUKNOWN y mantiene solo las filas en las que la condición es TRUE.

Crear Columnas anulables en las tablas

Al crear tablas, es posible declarar una columna como anulable o no anulable.

CREATE TABLE MyTable
(
    MyCol1 INT NOT NULL, -- non-nullable
    MyCol2 INT NULL      -- nullable
) ;

De forma predeterminada, todas las columnas (excepto las que están en la restricción de clave principal) se pueden ser NULL a menos que establezcamos explícitamente la restricción NOT NULL.

Intentar asignar NULL a una columna que no acepta valores NULL dará como resultado un error.

INSERT INTO MyTable (MyCol1, MyCol2) VALUES (1, NULL) ;  -- works fine

INSERT INTO MyTable (MyCol1, MyCol2) VALUES (NULL, 2) ;  
        -- cannot insert
        -- the value NULL into column 'MyCol1', table 'MyTable'; 
        -- column does not allow nulls. INSERT fails.

Actualización de campos a NULL

Establecer un campo como NULL funciona exactamente igual que con cualquier otro valor:

UPDATE Employees 
SET ManagerId = NULL
WHERE Id = 4

Insertar filas con campos NULL

Por ejemplo, insertar un empleado (employee) sin número de teléfono y sin gerente en Empleados (Employees) tabla de ejemplo:

INSERT INTO Employees
    (Id, FName, LName, PhoneNumber, ManagerId, DepartmentId, Salary, HireDate)
VALUES
    (5, 'Jane', 'Doe', NULL, NULL, 2, 800, '2016-07-22');