Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] mão na massa

Pedi ajuda pro ChatGPT e ele me respondeu isso: SELECT nomeAluno FROM alunos WHERE nota = (SELECT MAX(nota) FROM notas);

Essa consulta tbm funcionaria?

O ChatGPT disse: Boa pergunta! A resposta depende da estrutura do banco de dados. Vamos analisar:

Sua consulta: sql Copiar Editar SELECT nomeAluno FROM alunos WHERE nota = (SELECT MAX(nota) FROM notas); Vai funcionar se: A tabela alunos tem um campo chamado nota.

A tabela notas também tem um campo nota, e os dados são compatíveis (ou seja, ambos representam a mesma métrica).

Não há ambiguidade na correspondência entre as duas tabelas (ex: se nota de alunos está sincronizada com a de notas).

Mas não é ideal, porque: Você está comparando a nota da tabela alunos com o valor máximo da tabela notas, sem garantir que elas estão relacionadas por algum identificador, como idAluno.

Pode causar inconsistência se as tabelas tiverem dados diferentes ou não sincronizados.

Forma mais correta (com JOIN): Se nota estiver apenas na tabela notas, e você quiser obter o nomeAluno com a maior nota, a forma correta seria:

sql Copiar Editar SELECT a.nomeAluno FROM alunos a JOIN notas n ON a.idAluno = n.idAluno WHERE n.nota = (SELECT MAX(nota) FROM notas); Resumindo: ✅ Sim, sua consulta pode funcionar, se a tabela alunos realmente tiver o campo nota.

⚠️ Mas pode ser incorreta ou arriscada se nota estiver apenas na tabela notas, ou se você estiver tentando relacionar dados entre duas tabelas.

Se quiser, posso te ajudar a modelar o banco corretamente ou fazer um diagrama simples da estrutura.

2 respostas

A consulta iria funcionar ou não se tivesse a table alunos e a table notas?

solução!

Boa tarde, Pedro! Tudo bom?

Essa consulta só iria funcionar se a tabela Alunos de fato tivesse um campo Nota, o que não é o caso do exercício proposto. Repare que para o exercício em questão, o registro da nota está em uma tabela própria, como você pode observar:

Esquema de banco de dados para tabelas "Alunos" e "Notas", listando atributos como ID, nome, curso e notas.

Como as tabelas estão modeladas dessa forma, esse código que você esta apresentando retornaria um erro desse tipo:

SQLITE_ERROR: sqlite3 result code 1: no such column: Nota

Ou seja, não existe a coluna Nota na tabela Alunos.

Para testar um código que nos retornaria o nome do aluno com maior nota, vamos criar as tabelas Alunos e Notas e populá-las. Dessa maneira:

CREATE TABLE Alunos (
    ID_aluno INT PRIMARY KEY,
    Nome VARCHAR(100),
    Curso VARCHAR(100)
);

CREATE TABLE Notas (
    ID_nota INT PRIMARY KEY,
    ID_aluno INT,
    Nota DECIMAL(5,2),
    FOREIGN KEY (ID_aluno) REFERENCES Alunos(ID_aluno)
);

INSERT INTO Alunos (ID_aluno, Nome, Curso) VALUES
(1, 'Ana Silva', 'Engenharia'),
(2, 'Carlos Souza', 'Direito'),
(3, 'Beatriz Lima', 'Administração');

INSERT INTO Notas (ID_nota, ID_aluno, Nota) VALUES
(1, 1, 8.5),
(2, 1, 7.2),
(3, 2, 6.0),
(4, 3, 9.1),
(5, 3, 8.7);

Agora, podemos executar a seguinte consulta:

SELECT Nome
FROM Alunos
WHERE ID_aluno = (
    SELECT ID_aluno
    FROM Notas
    WHERE Nota = (
        SELECT MAX(Nota)
        FROM Notas
    )
);

Resultado:

Captura de tela de um editor de código exibindo comandos SQL, com "Beatriz Lima" destacado na seção de resultados.

Agora sim, uma consulta que cumpre com a atividade proposta!

Espero ter ajudado e fico à disposição se precisar.

Abraço e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado