It gives two rows when I try it - see the code below. If it still does not work for you, can you post the DDL for the tables and sample data like I have done here? That makes it easy for someone to copy your code and test and make changes.CREATE TABLE #MessagesTable(Message_id INT, Message_name VARCHAR(32));CREATE TABLE #UsersTable (Message_id INT, [User_name] VARCHAR(32));CREATE TABLE #MembershipTable (Message_id INT, Group_name VARCHAR(32));INSERT INTO #MessagesTable VALUES (1,'One'),(2,'Two'),(3,'Three'),(4,'Four');INSERT INTO #UsersTable VALUES(1,'User1'),(2,'User2');INSERT INTO #MembershipTable VALUES (3,'Group1'),(4,'Group2');SELECT a.*FROM #MessagesTable a INNER JOIN ( SELECT Message_id FROM #UsersTable WHERE user_name = 'user1' UNION SELECT Message_id FROM #MembershipTable WHERE group_name = 'group2' )b ON a.Message_id = b.Message_idDROP TABLE #MessagesTable;DROP TABLE #UsersTable;DROP TABLE #MembershipTable