Solución:
Un valor NULO en las bases de datos es un valor del sistema que ocupa un byte de almacenamiento e indica que un valor no está presente a diferencia de un espacio o cero o cualquier otro valor predeterminado. El campo en una base de datos que contiene el valor NULL significa que el contenido de esta celda es desconocido en el momento de mirarlo. Una columna que permite valores NULL también permite insertar filas sin ningún valor en esa columna. Existen varios pros y contras de usar valores NULL en contraposición a los valores predeterminados:
Pros
El valor NULL no tiene el tipo de datos, por lo tanto, se puede insertar en cualquier estructura de datos y en cualquier columna de la base de datos. Los valores predeterminados, por otro lado, deben tener su tipo de datos especificado y un valor predeterminado en una columna puede verse igual en otra columna, pero puede ser de un tipo diferente.
NULL se usa a menudo en esquemas donde un valor es opcional. Es un método conveniente para omitir la entrada de datos para campos desconocidos sin tener que implementar reglas adicionales, como almacenar valores negativos en un campo entero para representar datos omitidos.
Dado que el valor NULL ocupa solo 1 bit de espacio de memoria, pueden ser útiles al optimizar la base de datos. El uso de esos valores es mucho más eficiente que los valores predeterminados, por ejemplo, 8 bits de caracteres y 16 bits de números enteros.
Si bien los requisitos de su sistema pueden cambiar con el tiempo y los tipos de valores predeterminados con ellos, el valor NULL siempre es NULL, por lo que no es necesario actualizar el tipo de datos.
La asignación de No nulo a esquemas de tabla también puede ayudar con la validación de la tabla, en el sentido de que la columna con criterios No nulo requerirá que se inserte un valor. Los valores predeterminados no tienen estas capacidades.
Contras
Los valores NULL se confunden fácilmente con cadenas de caracteres vacías, que devuelven un valor en blanco al usuario cuando se seleccionan. En este sentido, los valores predeterminados son menos confusos y son la opción más segura, a menos que el valor predeterminado se establezca en la cadena vacía.
Si se permiten valores NULL en la base de datos, pueden ocasionarle al diseñador algo de tiempo y trabajo extra, ya que pueden hacer que la lógica de la base de datos sea más complicada, especialmente cuando hay muchas comparaciones con valores nulos.
Fuente: Pro y contras
No sé por qué intenta comparar estos casos con los casos. null
significa que alguna columna está vacía / no tiene valor, mientras que el valor predeterminado le da a una columna algún valor cuando no lo configuramos directamente en la consulta.
Quizás algún ejemplo sea una mejor explicación. Digamos que tenemos member
mesa. Cada miembro tiene una identificación y un nombre de usuario. Opcional, puede tener una dirección de correo electrónico (pero no es necesario). Además, cada miembro tiene una columna postCount (que aumenta cada vez que el usuario escribe una publicación). Entonces, la columna de correo electrónico puede tener una null
valor (porque el correo electrónico es opcional), mientras que la columna postCount es NOT NULL
pero tiene un valor predeterminado 0
(porque cuando creamos un miembro nuevo no tiene publicaciones).
Los valores nulos no son … ¡valores!
Nulo significa ‘no tiene valor’ … además del aspecto de la base de datos, una dimensión importante de las variables o campos no valorados es que no es posible usar ‘=’ (o ‘>’, ‘<'), al comparar variables.
Escribiendo algo como (VB):
if myFirstValue = mySecondValue
no devolverá True ni False si una o ambas variables no tienen valor. Tendrá que usar un ‘cambio de rumbo’ como:
if (isnull(myFirstValue) and isNull(mySecondValue)) or myFirstValue = mySecondValue
El código ‘habitual’ utilizado en tales circunstancias es
if Nz(myFirstValue) = Nz(mySecondValue, defaultValue)
No es estrictamente correcto, ya que las variables sin valor se considerarán como ‘iguales’ al valor de ‘defaultValue’ (generalmente una cadena de longitud cero).
A pesar de este comportamiento desagradable, nunca nunca nunca active sus valores predeterminados a una cadena de longitud cero (o ‘0’) sin una razón valiosa, y facilitar la comparación de valores en el código no es una razón valiosa.