Controlar valores NULL
Un valor NULL significa que no hay ningún valor o es desconocido. No significa cero ni en blanco, ni siquiera una cadena vacía. Esos valores no son desconocidos. Se puede usar un valor NULL para los valores que aún no se han proporcionado, por ejemplo, cuando un cliente aún no ha proporcionado una dirección de correo electrónico. Como ha visto anteriormente, algunas funciones de conversión también pueden devolver un valor NULL si un valor no es compatible con el tipo de datos de destino.
A menudo, deberá realizar pasos especiales para tratar con los valores NULL. NULL es realmente un valor sin valor. Es desconocido. No es igual a nada y no es desigual a nada. NULL no es mayor ni menor que nada. No podemos decir nada sobre lo que es, pero a veces es necesario trabajar con valores NULL. Afortunadamente, T-SQL proporciona funciones para la conversión o sustitución de valores NULL.
ISNULL
La función ISNULL toma dos argumentos. El primero es una expresión que estamos probando. Si el valor de ese primer argumento es NULL, la función devuelve el segundo argumento. Si la primera expresión no es NULL, se devuelve sin cambios.
Por ejemplo, supongamos que la tabla Sales.Customer de una base de datos incluye una columna MiddleName que permite valores NULL. Al consultar esta tabla, en lugar de devolver NULL en el resultado, puede optar por devolver un valor específico, como "None".
SELECT FirstName,
ISNULL(MiddleName, 'None') AS MiddleIfAny,
LastName
FROM Sales.Customer;
Los resultados de esta consulta podrían tener un aspecto parecido al siguiente:
FirstName
MiddleIfAny
LastName
Orlando
Hora
Gee
Keith
Ninguno
Howard
Donna
F.
Gonzales
...
...
...
Nota
El valor sustituido por NULL debe ser el mismo tipo de datos que la expresión que se está evaluando. En el ejemplo anterior, MiddleName es varchar, por lo que el valor de reemplazo no podría ser numérico. Además, deberá elegir un valor que no aparecerá en los datos como un valor normal. A veces puede ser difícil encontrar un valor que nunca aparecerá en los datos.
El ejemplo anterior se ha controlado un valor NULL en la tabla de origen, pero se puede usar ISNULL con cualquier expresión que pueda devolver un valor NULL, incluido el anidamiento de una función TRY_CONVERT dentro de una función ISNULL.
COALESCE
La función ISNULL no es estándar de ANSI, por lo que puede que desee usar la función COALESCE en su lugar. COALESCE es un poco más flexible, ya que puede tomar un número variable de argumentos, cada uno de los cuales es una expresión. Devolverá la primera expresión de la lista que no sea NULL.
Si solo hay dos argumentos, COALESCE se comporta como ISNULL. Sin embargo, con más de dos argumentos, COALESCE se puede usar como alternativa a una expresión CASE de varias partes mediante ISNULL.
Si todos los argumentos son NULL, COALESCE devuelve NULL. Todas las expresiones deben devolver tipos de datos iguales o compatibles.
La sintaxis es la siguiente:
SELECT COALESCE ( expression1, expression2, [ ,...n ] )
En el ejemplo siguiente se usa una tabla ficticia denominada HR.Wages, que incluye tres columnas que contienen información sobre las ganancias semanales de los empleados: la tarifa por hora, el salario semanal y una comisión por unidad vendida. No obstante, un empleado recibe solo un tipo de sueldo. Para cada empleado, una de esas tres columnas tendrá un valor y las otras dos serán NULL. Para determinar el importe total pagado a cada empleado, puede usar COALESCE para devolver solo el valor distinto de NULL que se encuentra en esas tres columnas.
SELECT EmployeeID,
COALESCE(HourlyRate * 40,
WeeklySalary,
Commission * SalesQty) AS WeeklyEarnings
FROM HR.Wages;
El resultado podría ser similar al siguiente:
EmployeeID (Id. de empleado)
WeeklyEarnings
1
899,76
2
1001,00
3
1298,77
...
...
NULLIF
La función NULLIF permite devolver NULL en determinadas condiciones. Esta función tiene aplicaciones útiles en áreas como la limpieza de datos, cuando desea reemplazar los caracteres en blanco o de marcador de posición por NULL.
NULLIF toma dos argumentos y devuelve NULL si son equivalentes. Si no son iguales, NULLIF devuelve el primer argumento.
En este ejemplo, NULLIF reemplaza un descuento de 0 por un valor NULL. Devuelve el valor de descuento si no es 0:
SELECT SalesOrderID,
ProductID,
UnitPrice,
NULLIF(UnitPriceDiscount, 0) AS Discount
FROM Sales.SalesOrderDetail;
El resultado podría ser similar al siguiente:
Id.OrdenVentas
ProductID
UnitPrice
Descuento
71774
836
356,898
NULL
71780
988
112,998
0,4
71781
748
818,7
NULL
71781
985
112,998
0,4
...
...
...
...