Questão de Banco de Dados — Formas normais — FUNDATEC 2026
- Código
- qg685906
- Banca
- FUNDATEC
- Órgão
- IFC-SC
- Ano
- 2026
- Nível
- Superior
- Cargo
- Professor EBTT - Informática: Banco de Dados
- A

- B

- C

- D

- E






GabaritoA — [imagem]
Gabarito: letra A. A consulta correta utiliza a cláusula INNER JOIN para combinar as tabelas normalizadas (venda, cliente e produto) por meio de suas chaves estrangeiras (id_cliente e id_produto), permitindo o cálculo do valor total de cada venda (quantidade * valor_unitario) e a exibição dos nomes correspondentes.
Após a normalização para a 3FN, os dados que antes estavam em uma única tabela foram distribuídos em três relações distintas. Para recuperar informações que agora residem em tabelas diferentes, é necessário realizar a junção (join) dessas tabelas. A alternativa A utiliza a sintaxe correta do SQL para realizar essa operação, estabelecendo as condições de junção (ON) que garantem a integridade dos dados retornados e ordenando o resultado pelo valor total de forma decrescente.
Esta alternativa está correta pois utiliza INNER JOIN para relacionar as tabelas venda, cliente e produto através de suas chaves primárias e estrangeiras. O cálculo v.quantidade * p.valor_unitario é aplicado corretamente a cada linha, e a ordenação ORDER BY valor_total DESC atende ao requisito de listar as vendas pelo maior valor.
Esta alternativa falha ao tentar selecionar colunas de tabelas diferentes (nome_cliente, nome_produto) sem realizar a junção (join) entre elas. Em SQL, para acessar dados de múltiplas tabelas, é obrigatório definir o relacionamento entre elas, caso contrário, o banco de dados não saberá como combinar os registros.
Embora utilize junções, a consulta aplica incorretamente a função de agregação SUM combinada com um GROUP BY por id_venda. Como a estrutura normalizada já separa os dados, não há necessidade de agrupar por venda para calcular o valor total de cada item, e o uso de SUM sem o contexto adequado de agregação pode gerar resultados imprecisos ou erros de sintaxe dependendo do modo do SQL.
O erro principal aqui é o uso da cláusula WHERE valor_total > 0. No SQL, o alias definido no SELECT (valor_total) não pode ser referenciado diretamente na cláusula WHERE, pois o WHERE é processado antes da projeção das colunas. Além disso, o uso de LEFT JOIN é desnecessário neste caso, pois espera-se que toda venda possua um cliente e um produto associados.
Esta alternativa utiliza a função de agregação MAX com GROUP BY, o que retornaria apenas o valor máximo de uma venda específica em vez de listar o valor total de cada venda individualmente, alterando o resultado esperado da consulta.
Ao realizar consultas em tabelas normalizadas, lembre-se sempre de: (1) identificar as chaves de ligação; (2) utilizar JOIN para unir as tabelas; e (3) evitar o uso de aliases de colunas calculadas dentro da cláusula WHERE.
Link permanente: /questoes/qg685906