Principalmente você não deve fazer nada sobre isso.
- É possível desativar o aviso configurando
ansi_warnings
desligado, mas isso tem outros efeitos, por exemplo. sobre como a divisão por zero é tratada e pode causar falhas quando suas consultas usam recursos como visualizações indexadas, colunas computadas ou métodos XML. - Em alguns casos limitados, você pode reescrever o agregado para evitá-lo. por exemplo.
COUNT(nullable_column)
pode ser reescrito comoSUM(CASE WHEN nullable_column IS NULL THEN 0 ELSE 1 END)
mas nem sempre é possível fazer isso sem alterar a semântica.
É apenas uma mensagem informativa exigida no padrão SQL. Além de adicionar ruído indesejado ao fluxo de mensagens, ele não tem efeitos negativos (além de significar que o SQL Server não pode simplesmente ignorar a leitura de
NULL
rows, que podem ter uma sobrecarga, mas desabilitar o aviso não oferece melhores planos de execução a esse respeito) A razão para retornar esta mensagem é que na maioria das operações em SQL os nulos se propagam.
SELECT NULL + 3 + 7
retorna NULL
(em relação a NULL
como uma quantidade desconhecida, isso faz sentido como ? + 3 + 7
também é desconhecido) mas
SELECT SUM(N)
FROM (VALUES (NULL),
(3),
(7)) V(N)
Retorna
10
e o aviso de que os nulos foram ignorados. No entanto, estas são exatamente a semântica que você deseja para consultas de agregação típicas. Caso contrário, a presença de um único
NULL
significaria que as agregações nessa coluna em todas as linhas sempre acabariam gerando NULL
o que não é muito útil. Qual é o bolo mais pesado abaixo? (Fonte da imagem, imagem Creative Commons alterada (cortada e anotada) por mim)
Após a pesagem do terceiro bolo, a balança quebrou e não há informações sobre o quarto, mas ainda foi possível medir a circunferência.
+--------+--------+---------------+
| CakeId | Weight | Circumference |
+--------+--------+---------------+
| 1 | 50 | 12.0 |
| 2 | 80 | 14.2 |
| 3 | 70 | 13.7 |
| 4 | NULL | 13.4 |
+--------+--------+---------------+
A pergunta
SELECT MAX(Weight) AS MaxWeight,
AVG(Circumference) AS AvgCircumference
FROM Cakes
Devoluções
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| 80 | 13.325 |
+-----------+------------------+
mesmo que tecnicamente não seja possível dizer com certeza que 80 foi o peso do bolo mais pesado (pois o número desconhecido pode ser maior) os resultados acima são geralmente mais úteis do que simplesmente retornar desconhecido.
+-----------+------------------+
| MaxWeight | AvgCircumference |
+-----------+------------------+
| ? | 13.325 |
+-----------+------------------+
É provável que você queira que os NULLs sejam ignorados, e o aviso apenas o alerta para o fato de que isso está acontecendo.