Bạn chỉ cần loại trừ những người là bạn trực tiếp cũng như là bạn của bạn bè. Tôi đã sắp xếp lại các bí danh của bảng để nó rõ ràng hơn một chút (với tôi, dù sao) những gì đang được truy xuất:
SELECT
u.*
FROM
user u
INNER JOIN friend ff ON u.user_id = ff.friend_id
INNER JOIN friend f ON ff.user_id = f.friend_id
WHERE
f.user_id = {$user_id}
AND ff.friend_id NOT IN
(SELECT friend_id FROM friend WHERE user_id = {$user_id})
Nó cũng loại bỏ nhu cầu loại trừ ID người dùng đang được truy vấn.