Saltar al contenido

Is not distinct from sql mas rapido que isnull de SQL

El comparar valores nulos con con los operadores lógicos(= / <>) normalmente es un dolor de cabeza puesto que no es posible hacer esta operacion sino cuentas con la funcion isnull. Este articulo te enseñara, Para que sirver el predicado is distinct from? como usar el is not distinct from en sql server? con ejemplos para que sea mas facil todavia.

En SQL debemos considerar un predicado como una expresión que se evalúa como TRUE (verdadero), FALSE (falso) o UNKNOWN (desconocido). tenemos qu recordar que esto no se es lo mismo que la clausula distinct de sql.

Índice

    Uso de la funcion isnull sintaxis

    Los valores nulos en las columnas suelen ser los mas complicados por lo cual se recomienda al crear una tabla que las columnas asignen un valor por defecto para evitar el NULL. Porque NULL es una pesadilla, así es.

    La sintaxis de isnull es

    SELECT ISNULL(COLUMNA, VALOR POR DEFECTO)

    la funcion evalua que si la columna contiene el valor nulo marcara el valor por defecto asignado.

    Como usar isnull con inner join?

    Cuando usamos la clausula join y debido a que NULL = NULL no tiene sentido, el resultado de tu consulta termina siendo un desasatre. En SQL Server, tenemos la opcion de usar la funcion isnull.

    SELECT * FROM tableA A
    JOIN tableB B ON A.key1 = B.key1
                     ISNULL(A.key2,'') = ISNULL(B.key2,'')
    
    
    Ejemplos de Distinct en Sql Server
    Ejemplos de Distinct en Sql Server

    IS Not Distinct From para SQL SERVER 2022

    Como puedes ver, antes de la version 2022 de sql server tenía que ocuparse de los valores NULL al trabajar con parámetros o columnas anulables. Incluso si usa columnas que no aceptan valores NULL, los valores NULL pueden introducirse cuando se usa LEFT JOIN. Entonces, para asegurarse de que las cláusulas WHERE o JOINS para poder asegurarse que sus consultas funcionaran surgia la necesidad e usar ISNULL.

    SQL Server 2022 presenta una función estándar denominada predicado diferenciado, que está diseñada para aplicar comparaciones mediante una lógica de dos valores, tratando los valores NULL como valores no NULL. esto puede ser de mucha ayuda para los errores de division entre cero

    IS DISTINCT FROM SINTAXIS

    La contrapartida lógica de dos valores del operador de igualdad (=) es el operador IS NOT DISTINCT FROM. De manera similar, la contraparte lógica de dos valores del operador diferente de (<>) es el operador IS DISTINCT FROM.

    <comparacion 1> IS [NOT] DISTINCT FROM <comparacion 2>

    IS NOT DISTINCT FROM EJEMPLO CON WHERE

    Esta expresión única comprueba que los valores de las columnas sean iguales, pero también comprueba si existen valores nulos. Tomando encuenta que debemos buscar los valores cuya fecha de envio fue confirmada.

    DECLARE @fecha AS DATE = NULL;
     
    SELECT numeroOrden, fechaenvio
    FROM ventas.ordenes
    WHERE fechaenvio IS DISTINCT FROM @fecha ;

    El uso del IS [NOT] DISTINCT FROM reduce los tiempos de comparacion de columnas con valores nulos los cuales puede aumentar el rendimiento de tus consultas.

    Operadores logicos is null vs is distinct from

    Es muy posible que cuando trates generar una consulta con este predicado presentes un error en debido a que el servidor de sql server sea una version inferior o si SGBD no sea compatible con el predicado enviado por lo cual te recomendamos el siguiente script para que puedas realizar la misma operacion que genera el is distinct from.

    Para el caso de A IS DISTINCT FROM B  esto se traduce de la siguiente forma:

    ((A <> B OR A IS NULL OR B IS NULL) AND NOT (A IS NULL AND B IS NULL))

    Para el caso de A IS NOT DISTINCT FROM B  esto se traduce de la siguiente forma:

     (NOT (A <> B OR A IS NULL OR B IS NULL) OR (A IS NULL AND B IS NULL))

    Observemos la cantidad de operadores logicos que debemos emplear para resolver la misma consulta, ademas para los casos de usar un linked server que no soporten este predicado marcara un error, la solucion a este error del SGBD al evaluar el predicado Seria el uso del operador Is null.

    En conclusion

    El predicado IS NOT DISTINCT FROM esta diseñado para resolver uno de los problemas que vienen afectado a los programadores de sql server desde hace bastante tiempo. Reduce el proceso de evaluar los valores nulos en una linea muy simple. Ademas el uso del operador is null es la solucion ante cualquier error de compatibilidad con el predicado is distinct from

    favor comentanos cuales usos le darias a este predicado!!

    Hasta la proxima!!