Su declaración de actualización original tiene GROUP BY y HAVING, que no están permitidos en la sintaxis de la declaración UPDATE. Aquí hay un enlace a un diagrama de sintaxis:ACTUALIZAR (Transact-SQL) .
Su segunda versión tiene GROUP BY y HAVING como parte de una tabla derivada, que es permitió.
Entonces, sí:tuviste un error de sintaxis.
Por cierto, estoy de acuerdo con @bluefeet:un CTE en lugar de una tabla derivada haría que su actualización fuera más fácil de leer y comprender. Una pequeña cosa, pero puede hacer una gran diferencia en la facilidad de mantenimiento.