La idea de la consulta es que debe hacer coincidir la cantidad de registros con la cantidad de valores que proporcionó en WHERE
cláusula.
SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(*) = 2
si no se especificó una restricción única en la etiqueta para cada ID, entonces DISTINCT
es necesario
SELECT ID
FROM tableName
WHERE tag IN (4, 8)
GROUP BY ID
HAVING COUNT(DISTINCT tag) = 2