How to make subtraction without repeating the subqueries?
You can use CTEs when you have repeating subqueries. Although it's not necessarily better for performance, in Postgres CTEs are an optimization fence, in other words they are evaluated once (or not at all).

Your query can probably be written more simply though:

SELECT player
FROM played_world AS pw
WHERE NOT EXISTS
      ( SELECT 1
        FROM world AS w
             JOIN player AS p
             ON w.winner = p.country_player
        WHERE w.year = pw.world_year
          AND p.player_id = pw.player
      ) 
GROUP BY player
HAVING count(*) &gt; 1 ;


or with EXCEPT:

SELECT player
FROM played_world
GROUP BY player
HAVING count(*) &gt; 1 

EXCEPT

SELECT p.player_id
FROM world AS w
     JOIN player AS p
     ON w.winner = p.country_player ;