Si el campo tiene un ancho fijo, almacenar NULL ocupa el mismo espacio que cualquier otro valor:el ancho del campo.
Si el campo es de ancho variable, el valor NULL no ocupa espacio.
Además del espacio requerido para almacenar un valor nulo, también hay una sobrecarga por tener una columna anulable. Para cada fila, se usa un bit por columna anulable para marcar si el valor de esa columna es nulo o no. Esto es cierto ya sea que la columna sea de longitud fija o variable.
El motivo de las discrepancias que ha observado en la información de otras fuentes:
-
El comienzo del primer artículo es un poco engañoso. El artículo no habla del costo de almacenar un valor NULL, sino del costo de tener la capacidad para almacenar un NULL (es decir, el costo de hacer que una columna sea anulable). Es cierto que cuesta algo en espacio de almacenamiento hacer que una columna sea anulable, pero una vez que lo haya hecho, se necesita menos espacio para almacenar un NULL que para almacenar un valor (para columnas de ancho variable).
-
El segundo enlace parece ser una pregunta sobre Microsoft Access. No conozco los detalles de cómo Access almacena NULL, pero no me sorprendería si es diferente a SQL Server.