Q:

Linha com valor NULL é desconsiderada pela função SUM?

Participei do concurso do IFNMG, prova elaborada pela Fundação CEFET. 
Resolvi a questão a seguir e marquei a letra C, mas o gabarito diz que o correto é a letra A. 
Questão 31
Considere que a tabela NotaFiscalItem está armazenada em um
sistema gerenciador de banco de dados (SGBD) relacional, contendo os seguintes dados.
Tabela: NotaFiscalItem

Em seguida, observe o comando SQL apresentado a seguir.
Figura: Comando SQL

O resultado produzido pela execução do comando SQL, ao considerar os dados apresentados na tabela NotaFiscalItem, é
a) 28,00 7,00 48,00
b) 28,00 NULL NULL
c) 48,00 7,00 48,00
d) 48,00 0,00 55,00
e) NULL NULL NULL
A instrução "sum(qtd_item*vlr_unitario - vlr_desconto)" não soma a primeira linha por conta do "null" na coluna "vlr_desconto"? Mas isso não depende do SGBD que se está utilizando?

A:

Na documentação de funções agrupadas do MySQL:

... group functions ignore NULL values.

OU em tradução livre:

... funções agrupadas ignoram valores NULOS.

No SQL Server o NULL de colunas agrupadas invalida a expressão, então para responder com precisão essa questão seria necessário saber qual o SGBD utilizado, porém segundo esta página (a qual não posso atestar com 100% de certeza a veracidade), no padrão ANSI todas as funções agregadas, exceto COUNT vão ignorar os valores NULL ao computar seus resultados.

Schema (MySQL v5.7)
CREATE TABLE NotaFiscalItem(
  nro_nota_fiscal int,
  nro_item smallint,
  qtd_item smallint,
  vlr_unitario numeric(7, 2),
  vlr_desconto numeric(7, 2)
);

INSERT INTO NotaFiscalItem VALUES
(1, 1, 2, 10.00, NULL),
(1, 2, 2, 7.50, 2.00),
(1, 3, 1, 20.00, 5.00);

Query #1
SELECT SUM(qtd_item * vlr_unitario - vlr_desconto),
       SUM(vlr_desconto),
       SUM(qtd_item * vlr_unitario) - SUM(vlr_desconto)
  FROM NotaFiscalItem;

Resultado:
| SUM(qtd_item * vlr_unitario - vlr_desconto) | SUM(vlr_desconto) | SUM(qtd_item * vlr_unitario) - SUM(vlr_desconto) |
| ------------------------------------------- | ----------------- | ------------------------------------------------ |
| 28                                          | 7                 | 48                                               |

Você pode verificar a execução no DB Fiddle.

A:

Para criar o banco de dados:
CREATE TABLE NotaFiscalItem (
  nro_nota_fiscal integer,
  nro_item smallint,
  qtd_item smallint,
  vlr_unitario numeric(7, 2),
  vlr_desconto numeric(7, 2)
);

INSERT INTO NotaFiscalItem (nro_nota_fiscal, nro_item, qtd_item, vlr_unitario, vlr_desconto) VALUES (1, 1, 2, 10, NULL);
INSERT INTO NotaFiscalItem (nro_nota_fiscal, nro_item, qtd_item, vlr_unitario, vlr_desconto) VALUES (1, 2, 2, 7.50, 2.00);
INSERT INTO NotaFiscalItem (nro_nota_fiscal, nro_item, qtd_item, vlr_unitario, vlr_desconto) VALUES (1, 3, 1, 20.00, 5.00);

Transcrevendo o SELECT:
Select sum(qtd_item*vlr_unitario - vlr_desconto),
       sum(vlr_desconto),
       sum(qtd_item*vlr_unitario) - sum(vlr_desconto)
  from NotaFiscalItem

Ao executar isso (no MySQL 5.6), veio essa resposta:
28    7    48

