Удаление данных с подзапросом

Есть задача, делаю разными способами и не понимаю, почему не получается. Код работает, но данные не удаляются. Посмотрите кто-то "трезвым взглядом", а то не понимаю в чем ошибка.

Задача: "В учебных заведениях Украины проведена реформа и все студенты, у которых средний бал не превышает 3.5 балла - отчислены из институтов. Сделайте все необходимые удаления из БД."

Мои варианты решения:

№1

delete  from students  where ID in(
      select STUDENT_ID 
           , avg(mark) 
      from EXAM_MARKS
      group by Student_ID having AVG(mark) < 3.5) 

№2

delete STUDENTS from STUDENTS where exists(
select 1 from EXAM_MARKS as EM 
where STUDENTS.ID = EM.STUDENT_ID 
group by Student_ID having avg(Mark) < 3.5 )

№3

DELETE STUDENTS FROM students s
INNER JOIN exam_marks as em ON s.id = em.student_id
WHERE s.id IN(
SELECT student_id FROM exam_marks 
GROUP BY student_id 
HAVING AVG(mark) <= 3.5)

Ответы (1 шт):

Автор решения: Krasnikov Kirill

Первый ваш вариант самый правильный. Оператор IN в SQL принимает справа либо список, либо подзапрос, результат которого состоит из одного столбца. В вашем случае в подзапросе написано select STUDENT_ID, avg(mark), из-за чего он возвращает два столбца.

Исправленный код:

DELETE FROM students
WHERE id IN (
    SELECT student_id FROM exam_marks
    GROUP BY student_id
    HAVING AVG(mark) < 3.5
);

Из документации Transact-SQL: https://docs.microsoft.com/en-us/sql/t-sql/language-elements/in-transact-sql?view=sql-server-ver15#arguments

→ Ссылка