Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2023
- Código
- ce397755
- Banca
- CESPE / CEBRASPE
- Órgão
- DATAPREV
- Ano
- 2023
- Cargo
- Ana TI ( )
- CCerto
- EErrado
GabaritoC — Certo
Gabarito: Certo. A afirmação está correta porque, ao executar um comando SELECT em mais de uma tabela sem a cláusula WHERE (ou sem critérios de junção como JOIN), o banco de dados realiza um produto cartesiano entre as tabelas, combinando cada linha de uma tabela com todas as linhas da outra. Esse comportamento é inerente à álgebra relacional e à linguagem SQL, e é exatamente o que ocorre quando se lista mais de uma tabela na cláusula FROM.
O produto cartesiano é uma operação binária da álgebra relacional que combina cada tupla (linha) de uma relação com todas as tuplas da outra relação. Em SQL, isso acontece implicitamente quando a cláusula FROM contém duas ou mais tabelas separadas por vírgula, sem qualquer condição de junção. Por exemplo, SELECT * FROM A, B retorna todas as combinações possíveis de linhas entre A e B. Se a tabela A tem 3 linhas e a tabela B tem 4 linhas, o resultado terá 3 × 4 = 12 linhas. Esse é o mesmo efeito de um CROSS JOIN explícito, que é justamente o produto cartesiano.
A cláusula WHERE tem a função de filtrar as linhas do resultado, aplicando condições de seleção. Quando ela está presente, o produto cartesiano é reduzido às combinações que satisfazem a condição — o que, na prática, equivale a uma junção interna (INNER JOIN) se a condição envolver colunas das duas tabelas. Sem WHERE, nenhum filtro é aplicado, e o resultado é o produto cartesiano completo. É importante não confundir: a cláusula WHERE não é a responsável por gerar o produto cartesiano; ela apenas o restringe. O produto cartesiano é gerado pela própria combinação de tabelas na cláusula FROM.
A banca explora aqui um conceito fundamental de SQL e álgebra relacional. O candidato pode confundir o papel da cláusula WHERE, achando que sem ela o comando não retornaria nada ou que a junção seria automática. Na verdade, sem WHERE ou JOIN, o banco devolve todas as combinações possíveis, o que pode gerar um volume enorme de dados — um clássico erro de desempenho em consultas mal formuladas.
Guarde a distinção: FROM com múltiplas tabelas = produto cartesiano; WHERE = filtro (seleção); JOIN = junção com critério. É exatamente essa fronteira que a questão testa.
A afirmação está correta. Ao executar um SELECT em mais de uma tabela sem a cláusula WHERE, o resultado é o produto cartesiano das tabelas acessadas. Isso ocorre porque a cláusula FROM com múltiplas tabelas (separadas por vírgula) gera um CROSS JOIN implícito, combinando cada linha de uma tabela com todas as linhas da outra. A cláusula WHERE é que filtraria essas combinações, mas, na sua ausência, todas as combinações são retornadas. Esse é o comportamento padrão da linguagem SQL e da álgebra relacional.
O produto cartesiano também pode ser escrito explicitamente com CROSS JOIN, que tem exatamente o mesmo efeito de listar as tabelas separadas por vírgula na cláusula FROM.
Gabarito: Certo
Link permanente: /questoes/ce397755