ALTER PROCEDURE [Secure].[RoleSelectAvailableByUserId] ( @AppKey uniqueidentifier, @UserId uniqueidentifier ) AS SET NOCOUNT ON; SELECT [Description], [Name], [Permanent], [RoleID] FROM [Secure].[Role] WHERE ( [ApplicationFK] = @AppKey AND [RoleID] NOT IN (SELECT RoleFK FROM [Secure].[UserRole] WHERE [UserFK] = @UserId) AND [Active] = 1 ) UNION SELECT [Description], [Name], [Permanent], [GlobalRoleId] AS RoleID FROM [Secure].[GlobalRole] WHERE ( [GlobalRoleId] NOT IN ( SELECT GlobalRoleFK FROM [Secure].[UserGlobalRole] WHERE ApplicationFK = @AppKey AND [UserFK] = @UserId ) AND [Active] = 1 )>I would have thought you must have a duplicate ug.GlobalRoleFK if the query works ok without the join
>> >> -- This gives me duplicate rows >> SELECT >> ug.[Active], >> ug.[ApplicationFK], >> ug.[LastUpdate], >> g.[Description], >> g.[Name], >> g.[Permanent], >> g.[GlobalRoleId] AS RoleID >> FROM [Secure].[GlobalRole] g >> JOIN [Secure].[UserGlobalRole] ug >> ON g.GlobalRoleId = ug.GlobalRoleFK >> WHERE g.GlobalRoleID NOT IN >> ( >> SELECT GlobalRoleFK FROM [Secure].[UserGlobalRole] >> WHERE ApplicationFK = '785df211-4c61-4b6c-8302-9934711bacd7' AND >> UserFK = '972C23B2-3FAB-43F3-8946-576F15A138B5' >> ) >> >> >> -- This works fine >> SELECT * FROM Secure.GlobalRole >> WHERE GlobalRoleID NOT IN >> ( >> SELECT GlobalRoleFK FROM [Secure].[UserGlobalRole] >> WHERE ApplicationFK = '785df211-4c61-4b6c-8302-9934711bacd7' AND >> UserFK = '972C23B2-3FAB-43F3-8946-576F15A138B5' >> ) >> >>