g1: a p b a q p q1: > > select ?x ?y where { > > ?x p ?y OPTIONAL { ?y q ?z} > > filter( ! exists {?y q ?z }) would return {?x/a ?y/b}, whereas q2: > > select ?x ?y where { > > ?x p ?y OPTIONAL { ?y q ?z} > > filter( ! exists {?v q ?z FILTER(?y != ?v) }) would return the empty solution set {} on graph g2: a p b b q p