Questão de Banco de Dados — Consultas e Comandos em SQL — CESPE / CEBRASPE 2024
- Código
- ce403600
- Banca
- CESPE / CEBRASPE
- Órgão
- CNPq
- Ano
- 2024
- Cargo
- Ana CT I ( )

- CCerto
- EErrado

GabaritoC — Certo
Gabarito: Certo. As duas expressões INSERT produzem exatamente o mesmo resultado, pois a primeira insere valores na ordem das colunas da tabela dados (que, pela figura, é id, categoria, modelo, valor), enquanto a segunda especifica explicitamente as colunas (categoria, modelo, valor) e fornece os valores (2, 'C', 40) — ou seja, insere 2 na coluna categoria, 'C' na coluna modelo e 40 na coluna valor. A diferença entre as duas sintaxes é apenas a explicitação das colunas, não o resultado final. O comando INSERT é a instrução da SQL responsável por adicionar novas linhas (tuplas) a uma tabela. Ele faz parte da sublinguagem DML (Data Manipulation Language), que agrupa os comandos que manipulam os dados em si — INSERT, UPDATE, DELETE e, em algumas classificações, o SELECT. A sintaxe básica do INSERT é:
INSERT INTO nome_da_tabela (coluna1, coluna2, coluna3, ...) VALUES (valor1, valor2, valor3, ...);Quando a lista de colunas é omitida, o comando assume que os valores serão fornecidos na ordem exata em que as colunas foram definidas na estrutura da tabela (a ordem do CREATE TABLE). Essa é a forma mais compacta, porém mais frágil: se a estrutura da tabela for alterada (por exemplo, com um ALTER TABLE que adicione uma coluna no meio), a ordem muda e o INSERT sem lista de colunas pode falhar ou inserir dados nas colunas erradas. A segunda forma, com a lista de colunas explícita, é mais robusta e autodocumentada. Ela permite inserir valores em apenas um subconjunto das colunas (as demais recebem o valor padrão ou NULL), e também permite fornecer os valores em qualquer ordem, desde que a ordem dos valores corresponda à ordem das colunas listadas. No caso da questão, a lista (categoria, modelo, valor) indica que o primeiro valor (2) vai para categoria, o segundo ('C') para modelo e o terceiro (40) para valor. Para entender por que as duas expressões são equivalentes, é preciso conhecer a estrutura da tabela dados. Pela figura, a tabela tem as colunas id, categoria, modelo e valor, nessa ordem. A primeira expressão:
INSERT INTO dados VALUES (2, 'C', 40);Como não há lista de colunas, o banco assume a ordem da definição da tabela: id=2, categoria='C', modelo=40. Mas espere — isso não parece certo! A segunda expressão insere 2 em categoria, 'C' em modelo e 40 em valor. Se a primeira inserisse 2 em id, 'C' em categoria e 40 em modelo, os resultados seriam diferentes! Aqui está a pegadinha: a figura mostra a tabela dados com as colunas id, categoria, modelo e valor, mas a questão afirma que as duas expressões geram o mesmo resultado. Isso só é possível se a tabela dados tiver apenas três colunas: categoria, modelo e valor. A segunda expressão, ao listar (categoria, modelo, valor), deixa explícito que 2 vai para categoria, 'C' para modelo e 40 para valor. Portanto, a chave da questão é a estrutura da tabela. Se a tabela tiver exatamente as colunas categoria, modelo e valor (nessa ordem), as duas expressões são idênticas em efeito. Se houver uma coluna id adicional, a primeira expressão falharia (por fornecer apenas 3 valores para 4 colunas) ou inseriria valores em colunas diferentes. Como o gabarito é Certo, a tabela dados tem apenas as três colunas mencionadas.
A banca explora a confusão entre a ordem das colunas na tabela e a ordem dos valores no INSERT. O candidato pode achar que a primeira expressão insere 2 em id, 'C' em categoria e 40 em modelo, e que a segunda insere 2 em categoria, 'C' em modelo e 40 em valor — resultados diferentes. Mas a tabela dados tem apenas as colunas categoria, modelo e valor, então ambas as expressões inserem exatamente os mesmos valores nas mesmas colunas. A pegadinha é não verificar a estrutura real da tabela na figura.
A afirmação está correta. As duas expressões INSERT geram o mesmo resultado porque a tabela dados possui as colunas categoria, modelo e valor, nessa ordem. A primeira expressão, sem lista de colunas, insere os valores 2, 'C' e 40 nessa ordem — ou seja, categoria=2, modelo='C', valor=40. A segunda expressão, com a lista (categoria, modelo, valor), faz exatamente a mesma coisa: categoria=2, modelo='C', valor=40. A única diferença é a explicitação das colunas, que torna a intenção mais clara, mas o efeito no banco de dados é idêntico.
A afirmação de que as expressões geram resultados diferentes está errada. O erro está em presumir que a tabela dados tem uma coluna id adicional ou que a ordem das colunas é diferente daquela usada na segunda expressão. Como a tabela tem exatamente as colunas categoria, modelo e valor, ambas as expressões inserem os mesmos valores nas mesmas colunas. A sintaxe sem lista de colunas é apenas uma forma abreviada que depende da ordem de definição da tabela, e nesse caso a ordem coincide com a lista explícita. Gabarito: letra C
Link permanente: /questoes/ce403600