How to select user that doesn't exist in the second table
You need 2 anti-joins. Written with either two LEFT JOIN / IS NULL:

SELECT 
   user.id
FROM
   users AS user
LEFT JOIN
   user_follows AS follower ON  follower.users_id = user.id 
                            AND follower.shown_users_id = 2
LEFT JOIN 
   user_follows AS followed ON  followed.shown_users_id = user.id 
                            AND followed.users_id = 2
WHERE
   follower.users_id IS NULL
  AND
   followed.users_id IS NULL 
  AND
   user.id &lt;&gt; 2 ;


or with two NOT EXISTS subqueries, which I find far more readable:

SELECT 
   user.id
FROM
   users AS user
WHERE
   NOT EXISTS 
      ( SELECT * 
        FROM user_follows AS follower
        WHERE follower.users_id = user.id 
          AND follower.shown_users_id = 2
      )
AND
   NOT EXISTS 
      ( SELECT * 
        FROM user_follows AS followed
        WHERE followed.shown_users_id = user.id 
          AND followed.users_id = 2
      ) 
AND
   user.id &lt;&gt; 2 ;