Lidiando con NULL



Bien, en la entrada anterior (null o vacio he ahi el dilema) mencionaba que la interpretación que el servidor de bases de datos le da al "NULL" tiende a ser algo como "inexistente" así que no se puede perder de vista la existencia de este "dato" en campos que no cuentan con restricciones de integridad de dominio (PK, Not Null, etc.). Casos como en los que si hablamos de un campo de valor de ventas o precio, si su valor se interpreta como "cero", como un error, etc.

Resultado de imagen para null value database

La importancia de identificar estos valores y de darle una interpretación en caso que deban conservarse, es que se debe ser cuidadoso al operar con ellos en cualquier cláusula de cualquier sentencia SQL.

Una muestra con datos numéricos


Esta ejecución permite visualizar qué sucede cuando se intenta agregar un valor a un campo numérico.

x (un número) + NULL = NULL.
Esto sucede con cualquier tipo de operación así que se debe revisar con cuidado en búsqueda de estos valores e identificar su correcta interpretación según sea el caso.


NULL en expresiones Boolean

Y es que este "dato" tiene un comportamiento particular cuando se trata de comparaciones en la cláusula WHERE pues esta retornará sólo aquellos registros cuya condición sea evaluada en TRUE.

Del siguiente conjunto de datos, en algún momento particular (quizá algo de presión y un poco apurado), uno podría pensar que al realizar un filtro en el que el salario fuese superior a la comisión en el conjunto de datos A, saldrían los mismos registros. Bueno, veamos.

Conjunto A

Este conjunto resultante no tuvo en cuenta que 2600 o 3100 puede ser mayor que NULL; momento, ¿puede?.

Definitivamente no. cuando se realiza este tipo de operaciones sucede lo siguiente:

¿X > NULL? ==> Unknown

La respuesta no puede ser falso ni verdadero pues el valor de NULL es inexistente.

Estos comportamientos también pueden arrojar resultados no esperados si no se contempla la existencia de valores NULL en campos de unión, ya sea para las uniones (JOIN) o para el uso de Exists.
Conjunto B

Así que vale la pena prestar un poco de atención a estos detalles antes de recibir notificaciones de error :) .

Saludos y hasta la próxima entrega!!!

PD: Voy a estar experimentando un poco con el look and feel del blog, espero que no sea molestia así que un poco de paciencia por favor :).





Comentarios

Entradas más populares de este blog

30 Tips - Día 20: Ver, Seleccionar y Seguir mensajes de error.

30 Tips - Día 16: Comparación de resultados en memoria con Autotrace.