martes, 22 de julio de 2014

Receta T-SQL No. 1-10: Comprobación de Valores NULL

Tabla de Contenido

0. Introducción
1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces

0. Introducción

Aprendamos a través de esta receta T-SQL cómo comprobar si una o varias columnas de una tabla tienen asignados el valor NULL. Aprenderemos que el uso apropiado de las expresiones IS NULL y IS NOT NULL corresponde con un método de validación para la creación de consultas robustas y la remoción de inconsistencias en los resultados, por ejemplo, para la carga de información en un reporte.

1. Problema

Necesitamos encontrar una construcción de T-SQL que nos permita validar si una columna o varias poseen valores NULL (o lo que es lo mismo, ausencia de valor).

2. Solución

T-SQL cuenta con las construcciones IS NULL y IS NOT NULL para validar si el valor de una columna es NULL o no es NULL, respectivamente.

3. Discusión de la Solución

Con la expresión o construcción IS [NOT] NULL, podemos determinar si una expresión (columna, variable, constante, &c.) es NULL.

Sintaxis:

expression IS [ NOT ] NULL

Argumentos:
  • expression: es cualquier expresión valida (constante, columna, variable, o función escalar [más adelante hablaremos sobre este tipo de expresión]).
  • NOT: Negación de la expresión. TRUE si el el valor no es NULL, en caso contrario FALSE.
Tipos de Resultado:
  • Lógico (boolean)
Valores de retorno:
  • Si el valor de la expression es NULL, IS NULL retorna TRUE; en caso contrario, FALSE.
  • Si el valor de la expression es NULL, IS NOT NULL retorna FALSE; en caso contrario, TRUE.
A lo anterior, hay que sumar que los operadores de comparación como = y != no deben ser usados para validar la ausencia de valor, para ello utilice cualquier de las construcciones descritas anteriormente. En caso de usar uno de estos operadores de comparación, el valor de retorno de la evaluación de la expresión será UNKNOWN.

Ejemplo de uso:

A través de la siguiente consulta recuperaremos el peso de todos los productos cuyo peso es menor a 10 kilos o que su color está ausente (i.e., NULL):

SELECT Name AS 'Nombre', Weight AS 'Peso', Color
FROM Production.Product
WHERE Weight < 10.00 OR Color IS NULL
ORDER BY Name;


Al ejecutar esta consulta, obtenemos los siguientes resultados (parciales):
Nombre, Peso y Color de la tabla Product
Figura 1. Nombre, Peso y Color de la tabla Product.

Observemos que en la Figura 1, es resaltan (propio de SQL Server 2014 Management Studio) los campos que poseen valore NULL. Por otra parte, debido a que el predicado:

Weight < 10.00 OR Color IS NULL


consiste en una expresión o inclusiva: es posible que para uno o más registros (filas) resulten los campos Weight (Peso) y Color con valores NULL.



¿Qué pasa si usamos el operador de igualdad (=) para NULL?


Color = NULL


Los resultados de la consulta van a ser diferentes. (Pueden comprobarlo ejecutando esta consulta en SQL Server 2014 Management Studio).


Nota en [1]:
«NULL values and their improper handling are one of the most prevalant sources of query mistakes.»

4. Práctica: Código T-SQL

Creemos un ejemplo adicional. En esta ocasión vamos a enumerar aquellos productos a los que no se las asignado un valor (NULL):

SELECT Name AS 'Nombre', Weight AS 'Peso'
FROM Production.Product
WHERE Weight IS NULL;


Al ejecutar esta consulta, obtenemos:
Peso NULL
Figura 2. Peso NULL.

Nuevamente vemos resaltado con amarillo los valores del campo Peso, a razón de que se trata de valores NULL.

5. Conclusiones

Aprendimos que el operador IS [NOT] NULL nos permite validar si los valores de una columna se hayan ausentes (i.e., NULL). En la nota al final de la sección 3, nos advierten que el mal uso de valores NULL es uno de los errores más comunes en la especificación o retorno de valores de una consulta.

6. Glosario

  • Ausente
  • Consulta
  • Desconocido
  • Expresión
  • NULL
  • SQL SErver
  • T-SQL

Literatura & Enlaces

[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.
[2]: IS [NOT] NULL (Transact-SQL) - http://msdn.microsoft.com/en-us/library/ms188795.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.