class Dog: Object {
    dynamic var name = ""
    dynamic var age = 0
    let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}
class Person: Object {
    dynamic var name = ""
    let dogs = List<Dog>()
}

追加したデータ

realm.add(Person(value: ["AAA", [["taro", 1], ["pochi", 6]]]))  
realm.add(Person(value: ["BBB", [["kuro", 1], ["hachi", 6]]]))  
realm.add(Person(value: ["CCC", [["taro", 6], ["pochi", 6]]]))  
realm.add(Person(value: ["DDD", [["kuro", 6], ["chibi", 6]]]))  

上記のモデルとデータで。
いくつかの特定の名前と一致し、かつ、年齢の条件と一致するdogを持つpersonを検索しようとしました。たとえば、「kuroかpochi かつ 3才以下のdogを持つperson」を検索する条件としてINを用いて次のような条件を書きました。

let persons = realm.objects(Person.self).filter(
    NSPredicate(format: "ANY dogs.name IN %@ && ANY dogs.age <= %d", 
                ["kuro", "pochi"], 3 )) 

結果‌​に'BBB'のみを期待しているのですが、‌​'AAA'も検索されてしまいます。INを‌​どのように解釈すればいいのでしょうか?‌​
「kuroかpochi かつ 3才以下のdogを持つperson」を検索する場合はどのような条件を記述すればいいのでしょうか?
よろしくお願いいたします。