Questão de Banco de Dados — SQL — Quadrix 2023
- Código
- qg025995
- Banca
- Quadrix
- Órgão
- CREA-GO
- Ano
- 2023
- Nível
- Superior
- Cargo
- Analista de Área - T.I

- CCerto
- EErrado

GabaritoE — Errado
Gabarito: ERRADO (letra E). A função DISTINCT elimina linhas duplicadas do resultado da consulta, mas não tem a finalidade de contar itens com valor não nulo — essa é a função da agregação COUNT. Além disso, a consulta apresentada não filtra notas diferentes de zero; ela apenas seleciona os registros de engenheiros que possuem curso com data_fim preenchida, e o DISTINCT atua sobre a combinação de todas as colunas do SELECT, não sobre a coluna nota isoladamente.
A função DISTINCT é uma cláusula do SELECT que remove linhas duplicadas do conjunto de resultados. Quando usada, o banco de dados compara todas as colunas selecionadas e elimina as linhas que são idênticas entre si. No código da questão, o SELECT DISTINCT está aplicado sobre as colunas ec.crea, ec.data_fim, TRUNC(NVL(ec.nota, 0), 3), ec.classificacao e ec.codigo_curso — ou seja, a combinação completa dessas colunas define a unicidade. Se dois registros tiverem o mesmo crea mas notas diferentes, ambos aparecem no resultado; se tiverem tudo igual, apenas um aparece.
A contagem de valores não nulos é feita pela função de agregação COUNT, que pode ser usada de duas formas: COUNT(*) conta todas as linhas do resultado, incluindo aquelas com valores nulos; COUNT(coluna) conta apenas as linhas onde a coluna especificada não é nula. No enunciado, a afirmação de que o DISTINCT "determina o número de itens com, pelo menos, um valor não nulo" confunde a função de eliminação de duplicatas com a função de contagem — são conceitos completamente distintos no SQL.
Além disso, a consulta não possui nenhuma condição que filtre notas diferentes de zero. O WHERE da subconsulta e o JOIN principal apenas verificam se data_fim não é nula, ou seja, se o engenheiro concluiu o curso. A função NVL(ec.nota, 0) apenas substitui valores nulos por zero na exibição, mas não exclui registros com nota zero do resultado. Portanto, mesmo que o DISTINCT fosse uma função de contagem (o que não é), ele não estaria contando apenas engenheiros com nota diferente de zero.
A pegadinha da banca está em atribuir ao DISTINCT uma funcionalidade que pertence ao COUNT, e ainda inventar um filtro de nota que não existe na consulta. O candidato que conhece a sintaxe do SQL percebe que o DISTINCT apenas elimina duplicatas, e que a consulta retorna todos os engenheiros com curso concluído, independentemente da nota.
A banca troca a função DISTINCT (elimina duplicatas) pela função COUNT (conta valores não nulos) e ainda sugere um filtro de nota que não existe na consulta. O NVL(ec.nota, 0) apenas substitui nulos por zero na exibição — não filtra nada. Guarde: DISTINCT = eliminar repetições; COUNT(coluna) = contar não nulos; COUNT(*) = contar todas as linhas.
A afirmação está errada por dois motivos. Primeiro, o DISTINCT não conta nada — ele apenas elimina linhas duplicadas do resultado. Segundo, a consulta não filtra notas diferentes de zero; o NVL(ec.nota, 0) apenas exibe zero no lugar de valores nulos, mas não remove registros com nota zero. A quantidade de engenheiros que não tiraram nota zero seria obtida com uma condição WHERE ec.nota <> 0 (ou WHERE ec.nota IS NOT NULL AND ec.nota <> 0), o que não existe no código. Portanto, o item é ERRADO.
Gabarito: letra E — o item está ERRADO.
Link permanente: /questoes/qg025995