Considere a seguinte tabela de um banco de dados relacional, bem como um comando escrito em álgebra relacional: Passageiro (CPF, Nome, Nacionalidade) \pi_{Nome, Nacionalidade} (\sigma_{CPF>123} (Passageiro)) O comando SQL equivalente a essa consulta é:
ASELECT Nome, Nacionalidade, CPF FROM Passageiro WHERE CPF > 123;
BSELECT CPF FROM Passageiro WHERE CPF > 123;
CSELECT Passageiro (Nome, Nacionalidade) WHERE CPF > 123;
DSELECT CPF FROM Passageiro WHERE (Nome, Nacionalidade) IN CPF>123;
ESELECT Nome, Nacionalidade FROM Passageiro WHERE CPF > 123;
Revelar gabarito e comentário▾
GabaritoE — SELECT Nome, Nacionalidade FROM Passageiro WHERE CPF > 123;
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”.
Álgebra relacional e SQL: tradução de seleção e projeção
Gabarito: letra E. A expressão combina a operação de seleção (σ, que filtra linhas pela condição CPF > 123) com a operação de projeção (π, que escolhe as colunas Nome e Nacionalidade). No SQL, a seleção vira a cláusula WHERE e a projeção vira a lista de colunas do SELECT — exatamente o que a alternativa E escreve: SELECT Nome, Nacionalidade FROM Passageiro WHERE CPF > 123;.
A álgebra relacional é a base teórica do modelo relacional: cada operação recebe uma ou mais relações (tabelas) como entrada e devolve outra relação como resultado. As duas operações mais fundamentais — e as que aparecem nesta questão — são a seleção e a projeção. A seleção, representada pela letra grega sigma (σ), filtra linhas de uma relação conforme uma condição booleana sobre os atributos; ela não altera o número de colunas, apenas escolhe quais tuplas permanecem. A projeção, representada pela letra grega pi (π), filtra colunas, mantendo apenas os atributos listados; ela não altera o número de linhas (embora elimine duplicatas no modelo teórico).
A tradução para SQL segue uma correspondência direta e sistemática, que é o coração desta questão:
Operação da álgebra relacional
Função
Cláusula SQL correspondente
Seleção (σ)
Filtrar linhas por condição
WHERE
Projeção (π)
Escolher colunas
Lista de colunas do SELECT
Produto cartesiano (×)
Combinar todas as tuplas de duas relações
FROM com múltiplas tabelas
Junção (⋈)
Combinar tuplas que satisfazem condição
JOIN ... ON
União (∪)
Unir tuplas de relações compatíveis
UNION
A pegadinha clássica da banca é inverter essa correspondência: afirmar que o WHERE corresponde à projeção, ou que o SELECT corresponde à seleção. O SELECT do SQL, apesar do nome, cumpre o papel da projeção (escolhe colunas), enquanto o WHERE cumpre o papel da seleção (filtra linhas). Guarde esse par com carinho: é nele que as alternativas desta questão se separam.
No caso concreto, a expressão diz: primeiro, da tabela Passageiro, selecione as tuplas cujo CPF seja maior que 123; depois, projete (mantenha) apenas os atributos Nome e Nacionalidade. A ordem de execução na álgebra é de dentro para fora: primeiro o σ, depois o π. No SQL, a ordem lógica de escrita é SELECT (projeção) → FROM (tabela) → WHERE (seleção), mas a semântica é a mesma: filtra-se pelas linhas que atendem à condição e exibem-se apenas as colunas pedidas.
Alternativa A — ❌ Incorreta
Inclui o atributo CPF na lista do SELECT: SELECT Nome, Nacionalidade, CPF. A projeção da álgebra relacional pede apenas Nome e Nacionalidade; trazer CPF na resposta viola a projeção, pois devolve uma coluna a mais do que a expressão original especifica.
Alternativa B — ❌ Incorreta
Projeta apenas CPF: SELECT CPF FROM Passageiro WHERE CPF > 123;. Além de omitir Nome e Nacionalidade (que a projeção exige), ela devolve justamente a coluna que a expressão original descarta. É o distrator que inverte completamente a lista de atributos.
Alternativa C — ❌ Incorreta
A sintaxe SELECT Passageiro (Nome, Nacionalidade) WHERE CPF > 123; não é válida em SQL. Faltam a cláusula FROM e a vírgula entre os atributos; a forma correta de indicar a tabela é na cláusula FROM, não entre parênteses após o SELECT.
Alternativa D — ❌ Incorreta
A sintaxe SELECT CPF FROM Passageiro WHERE (Nome, Nacionalidade) IN CPF>123; é inválida e semanticamente absurda. Projeta CPF (coluna errada), usa IN de forma incorreta (o IN compara um valor a uma lista de valores, não a uma condição) e mistura a condição CPF>123 dentro de um parêntese sem operador relacional.
Alternativa E — ✅ Correta ⟵ GABARITO
SELECT Nome, Nacionalidade FROM Passageiro WHERE CPF > 123; traduz fielmente a expressão: a lista Nome, Nacionalidade corresponde à projeção π, a tabela Passageiro ao operando da relação, e a condição CPF > 123 na cláusula WHERE corresponde à seleção σ. É a única alternativa que espelha exatamente as duas operações da álgebra relacional.
NÃO CAIA NESSA!
A banca explora a confusão entre seleção e projeção. Lembre-se: o WHERE do SQL filtra linhas (seleção σ) e o SELECTescolhe colunas (projeção π). Nesta questão, a alternativa A tenta incluir CPF na projeção, e a B projeta só CPF — ambas erram ao mexer na lista de colunas. Com esse par na cabeça, você elimina as duas de imediato.
PEGA ESSA DICA!
Ao traduzir álgebra relacional para SQL, siga o passo a passo: (1) identifique a tabela de origem no operando da expressão → vai para o FROM; (2) identifique a condição dentro do σ → vai para o WHERE; (3) identifique os atributos dentro do π → vão para a lista do SELECT. A ordem de escrita no SQL é SELECT → FROM → WHERE, mas a leitura da álgebra é de dentro para fora: primeiro o filtro de linhas, depois a escolha de colunas.