Here's another stab:DECLARE @Cms_DocumentTags TABLE( [Id] [int] IDENTITY(1,1) NOT NULL, [TagName] [nvarchar](50) NULL, [DocId] [int] NOT NULL)INSERT @Cms_DocumentTags (TagName, DocID)SELECT 'pdf', 1UNION ALL SELECT 'product', 1UNION ALL SELECT 'doc', 2UNION ALL SELECT 'non product', 2UNION ALL SELECT 'pdf', 3UNION ALL SELECT 'non product', 3UNION ALL SELECT 'pdf', 4UNION ALL SELECT 'product', 4UNION ALL SELECT 'foo', 4SELECT DocIDFROM @Cms_DocumentTagsWHERE TagName IN ('pdf', 'product')GROUP BY DocIDHAVING COUNT(*) = 2-- Or possibly AND ONLY..SELECT T.DocIDFROM @Cms_DocumentTags AS TINNER JOIN ( SELECT DocID FROM @Cms_DocumentTags WHERE TagName IN ('pdf', 'product') GROUP BY DocID HAVING COUNT(*) = 2 ) AS A ON T.DocID = A.DocIDGROUP BY T.DocIDHAVING COUNT(*) = 2