Para a seguinte consulta
SELECT sum(c)
FROM (SELECT 1 c WHERE false) t;
Eu pensei que leva a soma de zero números e, portanto, deve retornar 0
. (Da mesma forma, espero, por exemplo, uma função de agregação de matriz para retornar uma matriz vazia em elementos zero).
No entanto, está retornando a NULL
(usando PostgreSQL 11).
=> SELECT sum(c) FROM (SELECT 1 c WHERE false) t;
sum
-----
(1 row)
Isso não faz sentido para mim logicamente.
Por que a soma dos números zero (para qualquer tipo numérico) não é zero? Este padrão de comportamento de retorno NULL?
Ou talvez eu esteja perdendo alguma coisa. Algum motivo para fazer a soma NULL
em alguns casos de canto?
Este é um requisito do padrão SQL. Estou mais familiarizado com o padrão de 1992 . Citando dele, com ênfase minha:
Resumindo, NULLs são sempre excluídos do resultado de SUM, MAX, MIN e AVG. Não posso dizer exatamente por que isso acontece, exceto que acho útil poder distinguir entre a soma de um único valor de 0 e a soma de um conjunto vazio.