Currently we do a simple check on the filter ... is there a NOT or an OR in the filter and if so use EXISTS, otherwise use INNER JOIN.
What we ought to do is extend this further and see if the only use of OR is using that same variable
e.g a query like
collField.contains(var) && (var.name == :val1 || var.name == :val2)
would use EXISTS currently, but could reasonable use INNER JOIN