// This rule prints all objects in WM.
rule findObject
when
    $o: Object()
then
    System.out.println( "Object: " + $o );
end

Happily I get
    Object: 42
    Object: a String object
    Object: org.drools.reteoo.InitialFactImpl@4dde85f0

Now the query way:
    query object( Object o )
        o := Object()
    end
    rule findObjectByQuery
    when
        object( $a ; )
    then
        System.out.println( "Object by query: " + $a );
    end

Surprisingly, I get just one:
    Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0

A marvellous effect can be observed when the condition in rule
findObjectByQuery is modified to
    when
        Object()
        object( $a ; )
    then
I'd have guessed that the above result would appear repeatedly, once for each Object in WM,
but that's not so. For N-1 facts the rule fires N*(N+1)/2 times, showing the "initial object"
N times, the first inserted object N-1 times, the second one N-2 times and, finally, the last one
once.
Object by query: 42
Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0
Object by query: a String object
Object by query: 100
Object by query: 42
Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0
Object by query: a String object
Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0
Object by query: a String object
Object by query: org.drools.reteoo.InitialFactImpl@4dde85f0

-W