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_id
DROP TABLE #MessagesTable;
DROP TABLE #UsersTable;
DROP TABLE #MembershipTable