Esta es una forma genérica de transformar esta consulta de actualización del formulario del servidor 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 es una pseudocolumna que apunta a la ubicación única de una fila. Podría usar en su lugar la clave principal de la tabla si tuviera una.
La consulta n.º 2 de la pregunta no hace lo que esperaba porque la tabla actualizada Users
nunca se une a la misma tabla Users u
en la cláusula FROM. Al igual que cuando coloca el nombre de una tabla dos veces en una cláusula FROM, no se unen o vinculan implícitamente, se consideran como dos conjuntos independientes de filas.