Gunakan:
SELECT u.userid,
u.username,
COALESCE(f.numFiles, 0) AS numFiles,
COALESCE(p.numPhotos, 0) AS numFiles,
COALESCE(g.numGroups, 0) AS numGroups
FROM [USER] u
LEFT JOIN (SELECT t.userid,
COUNT(*) AS numFiles
FROM [FILES] t
GROUP BY t.userid)f ON f.userid = u.userid
LEFT JOIN (SELECT t.userid,
COUNT(*) AS numPhotos
FROM [PHOTOS] t
GROUP BY t.userid) p ON p.userid = u.userid
LEFT JOIN (SELECT t.userid,
COUNT(*) AS numGroups
FROM [GROUPS] t
GROUP BY t.userid) g ON g.userid = u.userid
WHERE u.userid = 2
Anda harus menggunakan gabungan OUTER agar ini berada dalam satu kueri; INNER bergabung untuk semua tabel akan mengharuskan pengguna memiliki setidaknya satu catatan dalam tabel FILES, PHOTOS dan GROUPS untuk berada di hasil. OUTER join berarti bahwa pengguna dengan record di setidaknya salah satu tabel (FILES, PHOTOS atau GROUPS) akan dikembalikan.
Tetapi BERGABUNG juga berisiko menggembungkan hasil, yang merupakan masalah yang terjadi pada versi jawaban saya sebelumnya. Dengan mengubah kueri untuk menggunakan tabel turunan/tampilan sebaris untuk jumlah FILES, GROUPS, dan PHOTOS, masalah terpecahkan dan tidak perlu GROUP BY di luar tabel turunan/tampilan sebaris.