Puede usar una left outer join
para agarrar a todos los usuarios, luego, arrasa con cualquier usuario donde haya un grupo adjunto. La siguiente consulta le dará solo la lista de usuarios donde no hay grupo disponible:
select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
where
g.userid is null
Si desea encontrar todos los usuarios que no están en un grupo en particular:
select
u.*
from
users u
left outer join groupusers g on
u.userid = g.userid
and g.groupid = @GroupID
where
g.userid is null
Esto solo excluir a los usuarios de ese grupo en particular. Todos los demás usuarios serán devueltos. Esto se debe a que el groupid
la condición se realizó en join
cláusula, que limita las filas unidas, no devueltas, que es lo que where
cláusula sí.