Fala pessoal,
Nesse post vamos entender quando podemos encontrar a mensagem abaixo e se isso é realmente um problema ou não! #gogogo
“Warning: Null value is eliminated by an aggregate or other SET operation”
Warning: Null value is eliminated by an aggregate or other SET operation:
Vamos simular um cenário criando uma tabela e inserindo alguns registros.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
USE Traces CREATE TABLE Teste_Soma ( Id INT IDENTITY(1,1) NOT NULL, Nome VARCHAR(100) NOT NULL, Salario NUMERIC(9,2) NULL ) INSERT INTO Teste_Soma VALUES ('Luiz Vitor', 1500.00), ('Gustavo Larocca', 3000.00), ('Eduardo Roedel', 5000.00) SELECT * FROM Teste_Soma |
Agora vamos fazer a soma dos valores da coluna “Salario”.
1 2 |
SELECT SUM(Salario) AS Vl_Total_Salario FROM Teste_Soma |
Até aqui tudo normal. Vamos então inserir mais uma linha, mas repare que dessa vez vamos informar o valor do Salario como NULL.
1 2 3 4 |
INSERT INTO Teste_Soma VALUES ('Dirceu Resende', NULL) SELECT * FROM Teste_Soma |
Agora vamos fazer novamente a soma na coluna “Salario”.
1 2 |
SELECT SUM(Salario) AS Vl_Total_Salario FROM Teste_Soma |
Repare que o valor da soma é o mesmo do SELECT anterior.
Contudo, ao validar a aba “Messages” temos a mensagem abaixo e mesmo assim a query ainda foi executada com sucesso!
“Warning: Null value is eliminated by an aggregate or other SET operation.”
“Uai Luiz, mas afinal, isso é um ERRO ou não???”
Isso NÃO É UM ERRO!!! Como o próprio nome já diz: WARNING = AVISO e AVISO <> ERRO
O SQL Server está apenas te INFORMANDO que ele eliminou alguns valores NULL na soma (que é uma função de agregação). No nosso caso, ele eliminou o valor NULL da linha 4.
Lembro que no início da minha carreira eu enxergava essa mensagem, mas não entendia o que queria dizer e simplesmente ignorava. O tempo foi passando e um certo dia parei pra entender mais a fundo e depois nunca mais esqueci. Então resolvi compartilhar com vocês também, pois pode ser uma dúvida comum pra quem está começando. xD
CUIDADO: COUNT x NULL
Um outro caso que sempre me deixou intrigado é o seguinte:
1 2 |
SELECT COUNT(*) AS Count_Total, COUNT(Salario) AS Count_Salario FROM Teste_Soma |
Repare que ao utilizar o “COUNT(*)” ele retorna o valor 4, pois ele entende que você quer saber a quantidade total de linhas na sua tabela, independente de possuir o valor NULL ou não.
Mas quando utilizamos o “COUNT(Salario)” em uma coluna específica, nesse caso o SQL Server irá ignorar os valores NULL e por esse motivo ele retorna o valor 3.
“Warning: Null value is eliminated by an aggregate or other SET operation.”
Espero que tenha gostado e que isso também possa ser útil no seu dia a dia. Até o próximo post!
Me siga no LinkedIn e YouTube para ficar por dentro das novidades.
Abraço,
Luiz Vitor França Lima
Consultor SQL Server