Во втором вы ссылаетесь на classes
дважды.Это две отдельные ссылки, и ссылки c
и cl
не коррелированы.На самом деле нет никаких условий для c
, поэтому все строки обновляются.
Вы могли бы добавить условие корреляции:
UPDATE classes
SET year = 1
FROM classes cl JOIN
professors p
ON p.class_id = cl.class_id
WHERE p.name = 'Smith' AND cl.class_id = classes.class_id;
Однако JOIN
не требуется, и первый запрос - лучший подход (для этой цели).