The problem is that filteredArrayUsingPredicate: filters the entire groups array. So ANY operator says to filter out all subarrays which contain Question object with needed Id property.
In your Example you have Questions with the same Id and parent in the same subarray, so ANY works here properly and there is no difference between == and CONTAINS for our goal.
To get needed result you first need to flatten your groups to one-dimensional array of Questions and then apply your predicate.
Unfortunately NSArray class does't provide any method to flatten multi-dimensional array (: