Hola, chicos,
¡Buenas noches!

En este post hablaré de algo que es muy común encontrar al desarrollar consultas usando Transact-SQL (T-SQL) en SQL Server, que son funciones de agregación o agrupación (Ej: SUM, MAX, MIN, AVG) sobre columnas que tienen valores NULL en sus registros. Cuando esto sucede, se genera una alerta con este mensaje:

Advertencia: El valor nulo se elimina mediante una operación agregada u otra operación SET.

Aunque es solo una alerta, algunas aplicaciones pueden presentar errores al interpretar el Aviso como un error y devolver una excepción. En este post te mostraré cómo evitar este mensaje.

Usando SET ANSI_NULLS APAGADO

Aunque es una “solución alternativa”, lamentablemente es la “solución” que veo que más utilizan los desarrolladores para evitar este tipo de advertencias, principalmente porque es más práctica, más rápida y más conocida que otras soluciones.

SQL Server - Warning Null value is eliminated by an aggregate or other SET operation 2
SQL Server: advertencia El valor nulo se elimina mediante una operación agregada u otra operación SET 2

Aunque esta es una “solución” muy mala, existen soluciones mucho peores, como SET ANSI_WARNINGS OFF.

Si utiliza este recurso en cualquier consulta que haya desarrollado, NECESITA leer la publicación SQL Server: ¿por qué NO utilizar SET ANSI_WARNINGS OFF?.

Usando filtros

La solución más correcta es aplicar filtros a su consulta para devolver solo registros válidos en las funciones de agregación. Esta solución no es muy utilizada porque hay que hacerla manualmente en todas las consultas y no todos los desarrolladores quieren hacer este trabajo, aunque es la solución recomendada y más correcta.

SQL Server - Resolvendo Solved Warning Null value is eliminated by an aggregate or other SET operation
SQL Server: solución Resuelta Advertencia El valor nulo se elimina mediante una operación agregada u otra operación SET

Si bien la solución que usa ISNULL es inofensiva y siempre satisfará esta necesidad, tenga mucho cuidado al usar el filtro en WHERE como se hizo en el ejemplo 2. Aunque parece coherente, tenga en cuenta que el valor del resultado final ha cambiado.

El uso de ISNULL garantiza que la suma se realice correctamente y que los valores NULL se conviertan a cero sin comprometer el resultado final. Por otro lado, tiene menos rendimiento que usar un filtro en WHERE para eliminar casos que no se deben agregar, pero hay que usar muy bien estos filtros para no alterar el resultado. Por lo tanto, utilice la mejor solución según sus necesidades.

¡Eso es todo, amigos!
Espero que te haya gustado el post.