Porque, los querysets en django son lazy-mente evaluados.
¿Que significa? Que son ejecutados, hasta que sea completamente necesario.
Ejemplo:
Código Python:
Ver originalqs = MyModel.objects.filter(...) # Aqui no ejecuta nada
# mas operaciones
for obj in qs: # En la primera iteración es donde ejecuta el query antes no
pass