AS
WITH
Grupos AS(SELECT contato.IDContato, contato_Grupos.IDGrupo, contato_Grupos.IDContato AS IDContexto FROM contato, contato_Grupos WHERE (contato_Grupos.IDGrupo = contato.IDContato)),
Membros AS (SELECT contato.IDContato, contato_Grupos.IDContato AS ID FROM contato, contato_Grupos, Grupos WHERE contato_Grupos.IDGrupo = Grupos.IDGrupo AND contato.IDContato = Grupos.IDContexto),
Instituicoes AS(SELECT contato.IDContato, Grupos.IDContexto FROM contato, Grupos WHERE Grupos.IDContato = contato.IDContato AND NOT EXISTS(SELECT Id FROM AspNetUsers WHERE AspNetUsers.Id = Grupos.IDContato))
SELECT contato.*, contato.IDMembro AS IDContexto FROM contato UNION
SELECT contato.*, Grupos.IDContexto AS IDContexto FROM contato, Grupos WHERE (Grupos.IDContato = contato.IDContato) UNION
SELECT contato.*, Membros.ID AS IDContexto FROM contato, Membros WHERE Membros.IDContato = contato.IDContato UNION
SELECT contato.*, Instituicoes.IDContexto AS IDContexto FROM contato, Instituicoes WHERE Instituicoes.IDContato = contato.IDMembro