SQL Server – Warning: Null value is eliminated by an aggregate or other SET operation.

Olá pessoal,
Boa noite!

Neste post vou falar sobre algo que é muito comum de se encontrar no desenvolvimento de queries utilizando Transact-SQL (T-SQL) no SQL Server, que são funções de agregação ou agrupamento (Ex: SUM, MAX, MIN, AVG) em colunas que possuem valores NULL em seus registros. Quando isso acontece, é gerado um alerta com essa mensagem:

Warning: Null value is eliminated by an aggregate or other SET operation.

Embora seja apenas um alerta, algumas aplicações podem apresentar erros interpretando o Warning como erro e retornando uma exceção. Neste post vou mostrar como evitar essa mensagem.

Utilizando SET ANSI_NULLS OFF

Embora seja uma “gambiarra”, infelizmente é a “solução” que eu mais vejo os desenvolvedores utilizando para evitar esse tipo de warning, principalmente por ser mais prático, rápido e conhecido que as outras soluções.

SQL Server - Warning Null value is eliminated by an aggregate or other SET operation 2

Utilizando filtros

A solução mais correta é aplicar filtros na sua query para retornar apenas os registros válidos nas funções de agregação. Essa solução não é muito utilizada porque precisa ser feita manualmente em todas as queries e nem todos os desenvolvedores querem ter esse trabalho, embora seja a solução recomendada e mais correta.

SQL Server - Resolvendo Solved Warning Null value is eliminated by an aggregate or other SET operation

Enquanto a solução utilizando os ISNULL é inofensiva e sempre vai satisfazer essa necessidade, muito cuidado ao utilizar o filtro no WHERE como foi feito no exemplo 2. Apesar de parecer ser algo coerente, note que o valor do resultado final foi alterado.

Utilizar o ISNULL garante que a soma seja feita corretamente e os valores NULL sejam convertidos para zero sem comprometer o resultado final. Em contrapartida, ele é menos performático que utilizar um filtro no WHERE para remover os casos que não devem ser somados, mas esses filtros devem ser muito bem utilizados para não alterar o resultado. Então, utilize a melhor solução conforme a sua necessidade.

É isso aí, pessoal!
Espero que tenham gostado do post.

SQL, sql server, sql server 2008, sql server 2008 R2, Oracle, Oracle Database, Oracle 11g, Oracle 10g, Oracle 12c, MySQL, Firebird, Consultoria, Consultor, Programador, Programação. Desenvolvedor, Analista de Sistemas, DBA, Criação de website, Criação de Sistema Web, Vitória, Vila Velha, Guarapari, Espírito Santo, ES, Consultoria SQL em VItória, Treinamento, Curso, Prestação de serviço, prestar serviço, freelancer, freela, banco de dados, consultoria em banco de dados, consultor de banco de dados

Deixe uma resposta