Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2025
- Código
- ce417345
- Banca
- CESPE / CEBRASPE
- Órgão
- FUB
- Ano
- 2025
- Cargo
- Tec ( )
- CCerto
- EErrado
GabaritoE — Errado
Gabarito: Errado (E). A consulta SELECT COUNT(a), AVG(a) FROM TABELA_TESTE; retornará count = 2 e avg = 6, e não count = 3 e avg = 4 como afirma o item. O erro está em considerar que a linha inserida com valor apenas na coluna b (e, portanto, com a nulo) seria contabilizada pela função COUNT(a) e influenciaria a média AVG(a) — o que não ocorre, pois essas funções ignoram valores nulos.
A questão testa um dos pontos mais sensíveis do SQL: o comportamento das funções de agregação diante de valores NULL. Vamos entender o que acontece passo a passo. A tabela TABELA_TESTE é criada com duas colunas: a (inteiro) e b (texto). Em seguida, são executados três comandos INSERT:
INSERT INTO TABELA_TESTE (a) VALUES (5); — insere uma linha com a = 5 e b = NULL.
INSERT INTO TABELA_TESTE (b) VALUES ('FUB'); — insere uma linha com b = 'FUB' e a = NULL.
INSERT INTO TABELA_TESTE (a) VALUES (7); — insere uma linha com a = 7 e b = NULL.
Portanto, a tabela fica assim:
a | b |
|---|---|
5 | NULL |
NULL | 'FUB' |
7 | NULL |
Agora, a consulta SELECT COUNT(a), AVG(a) FROM TABELA_TESTE; é executada. A função COUNT(a) conta o número de linhas em que a coluna a não é nula. Como há duas linhas com valor em a (5 e 7), o resultado é 2. A função AVG(a) calcula a média aritmética dos valores não nulos da coluna a, ou seja, (5 + 7) / 2 = 6. O item afirma que o resultado seria count = 3 e avg = 4, o que estaria correto apenas se a linha com a = NULL fosse considerada — mas isso não acontece.
A pegadinha clássica da banca é fazer o candidato acreditar que COUNT(a) conta todas as linhas da tabela, como se fosse COUNT(*). A diferença é crucial: COUNT(*) conta todas as linhas, independentemente de valores nulos; COUNT(coluna) conta apenas as linhas em que a coluna especificada não é nula. O mesmo raciocínio vale para AVG(a), que ignora os nulos no cálculo da média. Se a consulta fosse SELECT COUNT(*), AVG(a) FROM TABELA_TESTE;, o count seria 3, mas o avg continuaria sendo 6, pois a linha com a nulo não entraria na média.
A banca troca COUNT(a) por COUNT(*). O candidato desatento conta as 3 linhas da tabela e calcula a média como (5 + 0 + 7) / 3 = 4, chegando exatamente ao resultado apresentado no item. Mas o SQL ignora nulos nas funções de agregação: COUNT(a) retorna 2 e AVG(a) retorna 6. Lembre-se: COUNT(*) conta linhas; COUNT(coluna) conta valores não nulos.
O item afirma que o resultado da consulta será count = 3 e avg = 4. Isso está incorreto. O resultado real é count = 2 e avg = 6, pois as funções COUNT(a) e AVG(a) desconsideram a linha em que a é nulo. O valor 4 para a média só seria obtido se o nulo fosse tratado como zero, o que não é o comportamento padrão do SQL.
Gabarito: Errado (E).
Link permanente: /questoes/ce417345