You are right about the part where the system treats multiple instances as one object, and when you try to access some property it takes it from the first instance etc. But I'm sure you are aware that "Compare instance variable" is very often used to pick or "filter out" instances. If you have multiple instances, some with id=0 and some with id=1, you can use this event to pick only instances with the id=1 for example.
It has the same effect as using System event "Pick by evaluate" or "Pick by comparison". And actually you can change my capx to use "System Pick by evaluate Sprite.id=choose(0,1)" and it will have the same problem. The engine will loop through each instance, each time comparing with a different result of choose() expression.
This seems wrong to me, because it works differently in SQL for example. If you do "SELECT * FROM table WHERE code=int(rand()*2)", this will select records with only one value in code field, either with 0 or 1, not a mix of both.