L'istruzione di aggiornamento originale contiene GROUP BY e HAVING, che non sono consentiti nella sintassi dell'istruzione UPDATE. Ecco un collegamento a un diagramma della sintassi:UPDATE (Transact-SQL) .
La tua seconda versione ha GROUP BY e HAVING come parte di una tabella derivata, che è permesso.
Quindi, sì:hai avuto un errore di sintassi.
Per inciso, sono d'accordo con @bluefeet:un CTE al posto di una tabella derivata renderebbe il tuo aggiornamento più facile da leggere e capire. Una piccola cosa, ma può fare una grande differenza in termini di facilità di manutenzione.