try this:
;WITH cteModules
AS
(
SELECT ModuleId
FROM Course_Module
WHERE CourseID = 4
)
, cteQualifyingCources
AS
(
SELECT cmc.CourseID
FROM Course_Module AS cmc
JOIN cteModules AS cm ON cm.ModuleID = cmc.ModuleID
GROUP BY cmc.CourseID
HAVING COUNT(*) = (SELECT COUNT(*) FROM cteModules)
)
SELECT *
FROM Batch
WHERE CourseID IN (SELECT CourseID FROM cteQualifyingCources)