Ihre Unterabfrage ist überhaupt nicht korreliert. Der Bezeichner „TableA.key“ in der Unterabfrage bezieht sich auf TableA in der FROM-Klausel der Unterabfrage, nicht auf die Zieltabelle der Aktualisierung (die zufällig auch TableA ist). Sie möchten TableA.field nicht mit der Ergebnismenge einer Zwei-Tabellen-Verknüpfung aktualisieren. Sie wollen einfach das:
UPDATE TableA
SET TableA.field = (SELECT TableB.field
FROM TableB
WHERE TableA.key = TableB.key)