Questão de Banco de Dados — SQL — Quadrix 2024
- Código
- qg354215
- Banca
- Quadrix
- Órgão
- IBICT
- Ano
- 2024
- Nível
- Superior
- Cargo
- Tecnologista - Tecnologia da Informação
- CCerto
- EErrado
GabaritoE — Errado
Esta questão depende de um texto-base/tabela compartilhado com outras questões da mesma prova, e esse texto não está disponível. Os dados que faltam (valores, tabela, RCL, datas do caso) estão nele. O raciocínio abaixo é o método — confira os valores na imagem original.
Gabarito: ERRADO (letra E). O comando SQL apresentado contém um erro de sintaxe na cláusula INNER JOIN: a condição de junção referencia a tabela Autor_Artigo, que não está incluída no FROM. Para que a consulta funcione, a tabela Autor_Artigo (que faz a ligação entre Artigos e Autores) precisa ser adicionada ao FROM e a condição de junção deve ser ajustada. A subconsulta WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista') está correta, mas o JOIN está mal formado.
O comando SQL apresentado tem a intenção de listar os títulos dos artigos de uma revista específica (RECEN) junto com os nomes de seus autores. Para isso, ele usa um INNER JOIN entre as tabelas Artigos e Autores, e uma subconsulta para filtrar a revista. Vamos analisar a estrutura:
SELECT Artigos.Titulo AS TituloArtigo, Autores.Nome AS NomeAutor: seleciona as colunas desejadas, com apelidos (AS).
FROM Artigos: a consulta começa na tabela Artigos.
INNER JOIN Autores ON Autor_Artigo.AutorID = Autores.AutorID: aqui está o problema. A condição de junção usa a coluna Autor_Artigo.AutorID, mas a tabela Autor_Artigo não está listada no FROM. Em SQL, toda tabela referenciada na condição de junção deve estar presente no FROM (ou em um JOIN anterior). Como Autor_Artigo não está no FROM, o comando gera um erro de sintaxe.
Para corrigir, seria necessário incluir a tabela Autor_Artigo no FROM e fazer a junção em duas etapas: primeiro Artigos com Autor_Artigo, e depois Autor_Artigo com Autores. Por exemplo:
SELECT Artigos.Titulo AS TituloArtigo, Autores.Nome AS NomeAutor
FROM Artigos
INNER JOIN Autor_Artigo ON Artigos.ArtigoID = Autor_Artigo.ArtigoID
INNER JOIN Autores ON Autor_Artigo.AutorID = Autores.AutorID
WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista');A subconsulta WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista') está correta: ela filtra os artigos cuja revista tem o nome especificado. No entanto, o JOIN está mal formado, o que torna o comando inválido.
A banca troca a tabela que faz a ligação (Autor_Artigo) pela tabela Autores na condição de junção, sem incluí-la no FROM. O candidato pode achar que o comando está correto porque a subconsulta está certa, mas o JOIN está errado. Fique atento: toda tabela usada na condição de junção deve estar no FROM.
O comando SQL apresentado está errado porque a condição de junção ON Autor_Artigo.AutorID = Autores.AutorID referencia a tabela Autor_Artigo, que não está incluída no FROM. Em SQL, para usar uma tabela em uma junção, ela deve estar listada no FROM (ou em um JOIN anterior). Como Autor_Artigo não está presente, o comando gera um erro de sintaxe e não executa.
Para que a consulta funcione, seria necessário incluir Autor_Artigo no FROM e fazer a junção em duas etapas, como mostrado acima. A subconsulta WHERE Artigos.RevistaID = (SELECT RevistaID FROM Revistas WHERE Nome = 'NomeDaRevista') está correta, mas o JOIN está mal formado, o que torna o comando inválido.
Ao analisar comandos SQL com JOIN, verifique se todas as tabelas referenciadas na condição de junção estão presentes no FROM. Se houver uma tabela de ligação (como Autor_Artigo), ela deve ser incluída explicitamente. Essa é uma pegadinha comum em provas de banco de dados.
Gabarito: letra E (ERRADO).
Link permanente: /questoes/qg354215