El problema es que en realidad se está cumpliendo bien la condición, porque está descartando los tagId 2 y 4; pero el fotoId 12 también tiene un tagId 1, que no estás considerando...
Lla consulta que debes hacer, en realidad, es más compleja:
Código SQL:
Ver originalSELECT DISTINCT fotoid
FROM imagetag
WHERE fotoid NOT IN (SELECT fotoid FROM imagetag WHERE tagid IN (2,4));