Questão de Banco de Dados — Banco de Dados Relacionais — INSTITUTO AOCP 2024
Banco de Dados›Banco de Dados Relacionais
Código
qg262678
Banca
INSTITUTO AOCP
Órgão
SANEPAR
Ano
2024
Nível
Médio
Cargo
Técnico Profissional - Técnico em Informática
Você é um técnico em informática da Sanepar e recebeu a tarefa de gerar um relatório que lista os nomes dos funcionários que ganham mais de R$ 4.000, possuem dependentes e que esses dependentes sejam estudantes. Para isso, você precisa realizar uma consulta SQL (Structured Query Language) utilizando as tabelas Funcionarios e Dependentes do banco de dados da organização.Descrição das tabelas:• Funcionarios: contém informações sobre os funcionários, incluindo colunas como FuncionarioID, Nome, Salario e outras.• Dependentes: contém informações sobre os dependentes dos funcionários, incluindo colunas como DependenteID, FuncionarioID (chave estrangeira), Status (que pode ser ‘Estudante’ ou não) e outras.Sabendo disso, assinale a alternativa que apresenta a consulta SQL correta para você realizar essa tarefa.
ASELECT f.NomeFROM Funcionarios fWHERE Dependentes d ON f.FuncionarioID =d.FuncionarioIDJOIN f.Salario > 4000AND d.Status = ‘Estudante’;
BSELECT f.NomeFROM Funcionarios fJOIN Dependentes d ON f.FuncionarioID !=d.FuncionarioIDWHERE f.Salario < 4000AND d.Status = ‘Estudante’;
CSELECT f.NomeFROM Funcionarios fJOIN Dependentes d AS f.FuncionarioID =d.FuncionarioIDWHERE f.Salario > 4000AND d.Status = ‘Estudante’;
DSELECT f.NomeFROM Funcionarios fJOIN Dependentes d ON f.FuncionarioID =d.FuncionarioIDWHERE f.Salario > 4000AND d.Status = ‘Estudante’;
ESELECT f.NomeFROM Funcionarios fJOIN Dependentes d ON f.FuncionarioID =d.FuncionarioIDWHERE f.Salario > 4000OR d.Status = ‘Estudante’;
Revelar gabarito e comentário▾
GabaritoD — SELECT f.Nome
FROM Funcionarios f
JOIN Dependentes d ON f.FuncionarioID =
d.FuncionarioID
WHERE f.Salario > 4000
AND d.Status = ‘Estudante’;
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”.
Consultas SQL com JOIN: combinando tabelas Funcionarios e Dependentes
Gabarito: letra D. A consulta correta usa JOIN para combinar as tabelas Funcionarios e Dependentes pela chave estrangeira FuncionarioID, e WHERE para filtrar os funcionários com salário maior que 4000 e dependentes com status 'Estudante'. A sintaxe correta do JOIN exige a cláusula ON para especificar a condição de junção, e o WHERE deve conter as condições de filtro com AND para combinar os critérios.
O JOIN (ou INNER JOIN) é uma operação da álgebra relacional que combina linhas de duas ou mais tabelas com base em uma condição de junção. No modelo relacional, as tabelas se associam por meio de chaves estrangeiras, e o JOIN é a forma de recuperar dados relacionados. A sintaxe básica é SELECT colunas FROM tabela1 JOIN tabela2 ON condicao_de_juncao WHERE condicoes_de_filtro. A condição de junção define como as linhas das duas tabelas se relacionam, geralmente comparando a chave primária de uma com a chave estrangeira da outra. No caso, Funcionarios.FuncionarioID é a chave primária e Dependentes.FuncionarioID é a chave estrangeira que referencia o funcionário.
A cláusula WHERE aplica filtros sobre as linhas resultantes da junção. Para atender ao requisito de listar funcionários que ganham mais de R$ 4.000 e possuem dependentes estudantes, as condições devem ser combinadas com AND, pois todas precisam ser verdadeiras simultaneamente. Usar OR (como na alternativa E) traria funcionários que ganham mais de 4000 ou que têm dependentes estudantes, o que incluiria funcionários sem dependentes estudantes ou com salário menor, não atendendo ao pedido.
A alternativa D é a única que apresenta a sintaxe correta do JOIN com ON, a condição de junção correta (f.FuncionarioID = d.FuncionarioID), e o filtro WHERE com AND para f.Salario > 4000 e d.Status = 'Estudante'. As demais alternativas contêm erros de sintaxe, condições de junção incorretas ou operadores lógicos errados.
Guarde a estrutura fundamental: SELECT ... FROM tabela1 JOIN tabela2 ON condição_de_junção WHERE condições_de_filtro. É exatamente nessa estrutura que as alternativas se dividem: algumas erram na sintaxe do JOIN, outras na condição de junção, e outras no operador lógico do WHERE.
Critério
Alternativa D (correta)
Alternativa E (errada)
Operador lógico no WHERE
AND — exige que ambas as condições sejam verdadeiras
OR — aceita funcionários que atendam a apenas uma das condições
Resultado da consulta
Somente funcionários com salário > 4000 e dependentes estudantes
Inclui funcionários com salário > 4000 ou com dependentes estudantes (mesmo sem atender ao outro critério)
Adequação ao requisito
✅ Atende plenamente: lista exatamente quem ganha mais de R$ 4.000 e tem dependente estudante
❌ Não atende: amplia o resultado, incluindo casos fora do pedido
Alternativa A — ❌ Incorreta
A alternativa A apresenta erros graves de sintaxe. A cláusula WHERE não pode conter uma condição de junção como Dependentes d ON f.FuncionarioID = d.FuncionarioID; isso é função do JOIN ... ON. Além disso, a linha JOIN f.Salario > 4000 é inválida, pois JOIN não é usado para filtrar valores, e a condição de junção está no lugar errado. A sintaxe correta exige que o JOIN venha após o FROM e que a condição de junção seja especificada com ON.
Alternativa B — ❌ Incorreta
A alternativa B usa o operador != (diferente) na condição de junção: f.FuncionarioID != d.FuncionarioID. Isso faria a junção combinar funcionários com dependentes de outros funcionários, o que é semanticamente incorreto. Além disso, o filtro f.Salario < 4000 está invertido — o requisito é salário maior que 4000. A combinação desses dois erros torna a consulta completamente inadequada.
Alternativa C — ❌ Incorreta
A alternativa C usa JOIN Dependentes d AS f.FuncionarioID = d.FuncionarioID, o que é sintaxe inválida. A palavra-chave AS é usada para criar aliases de tabelas ou colunas, não para definir a condição de junção. A condição de junção deve ser introduzida pela cláusula ON, como em JOIN Dependentes d ON f.FuncionarioID = d.FuncionarioID. O restante da consulta (WHERE com AND) está correto, mas o erro no JOIN invalida a alternativa.
Alternativa D — ✅ Correta ⟵ GABARITO
A alternativa D apresenta a sintaxe correta: SELECT f.Nome FROM Funcionarios f JOIN Dependentes d ON f.FuncionarioID = d.FuncionarioID WHERE f.Salario > 4000 AND d.Status = 'Estudante'. O JOIN combina as tabelas pela chave estrangeira, o WHERE filtra os funcionários com salário maior que 4000 e dependentes com status 'Estudante', e o AND garante que ambas as condições sejam atendidas. Essa consulta retorna exatamente os nomes dos funcionários que ganham mais de R$ 4.000 e possuem dependentes estudantes.
Alternativa E — ❌ Incorreta
A alternativa E usa o operador OR no WHERE: f.Salario > 4000 OR d.Status = 'Estudante'. Isso retornaria funcionários que ganham mais de 4000 ou que têm dependentes estudantes, incluindo funcionários que não atendem a ambos os critérios. O requisito é que o funcionário ganhe mais de 4000 e tenha dependentes estudantes, portanto o operador correto é AND. O uso de OR amplia indevidamente o resultado da consulta.