Не проверено, но это должно гарантировать, что каждый пользователь учитывается только один раз, независимо от того, был ли он отправителем или получателем, или сколько сообщений он отправил или получил:
SELECT TOP 1
user_id,
friend_count = COUNT(DISTINCT u)
FROM
(
SELECT user_id,
u = message_from_user
FROM table
UNION ALL
SELECT user_id,
u = message_to_user
FROM table
) AS x
ORDER BY friend_count DESC;