Pular para o conteúdo principal

Questão de Banco de Dados — SQL — Quadrix 2023

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

Imagem da questão

Com base no modelo de dados e no código SQL acima apresentados, julgue o item.A função DISTINCT, utilizada na linha 1, tem a finalidade de determinar o número de itens com, pelo menos, um valor não nulo, que, nesse caso, é a quantidade de engenheiros que não tiraram nota zero nos cursos realizados.
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoE — Errado

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

SQL: a função DISTINCT e a contagem de engenheiros

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.

NÃO CAIA NESSA!

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.

DISTINCT
  • 1O que faz
    • Elimina linhas duplicadas
    • Compara todas as colunas do SELECT
  • 2O que NÃO faz
    • Não conta valores não nulos (isso é COUNT)
    • Não filtra notas diferentes de zero
  • 3COUNT
    • COUNT(*)
      • Conta todas as linhas
    • COUNT(coluna)
      • Conta apenas não nulos
  • 4NVL(nota, 0)
    • Substitui nulo por zero na exibição
    • Não exclui registros com nota zero
LEVEL · soulevel.com.br

Alternativa E — ❌ Incorreta ⟵ GABARITO

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