Ecco un modo generico per trasformare questa query di aggiornamento dal modulo del server SQL a PostgreSQL:
UPDATE Users
SET bUsrActive = false
WHERE
ctid IN (
SELECT u.ctid FROM Users u
LEFT JOIN Users u2 ON u.sUsrClientCode = u2.sUsrClientCode AND u2.bUsrAdmin = 1 AND u2.bUsrActive = 1
WHERE u.bUsrAdmin = 0 AND u.bUsrActive = 1 AND u2.nkUsr IS NULL
)
ctid è una pseudo-colonna che punta alla posizione univoca di una riga. Potresti invece usare la chiave primaria della tabella se ne avesse una.
La query n. 2 della domanda non fa ciò che ti aspetti perché la tabella aggiornata Users
non è mai unito alla stessa tabella Users u
nella clausola FROM. Proprio come quando inserisci due volte il nome di una tabella in una clausola FROM, non vengono uniti o vincolati in modo implicito, sono considerati come due insiemi di righe indipendenti.