La tua sottoquery non è affatto correlata. L'identificatore "TableA.key" nella sottoquery fa riferimento a TableA nella clausola FROM della sottoquery, non alla tabella di destinazione dell'aggiornamento (che è anche TableA). Non vuoi aggiornare TableA.field con il set di risultati di un join a due tabelle. Vuoi semplicemente questo:
UPDATE TableA
SET TableA.field = (SELECT TableB.field
FROM TableB
WHERE TableA.key = TableB.key)