Wrong. In the first case there will be two treatment - getting the category when calling Category.objects.get(id=1) and getting its child elements on the first invocation of cat.children.all(), and all subsequent calls will be taken from the cache ORM. In the second select_related() will be ignored, as it is used for joins s, and you have children, most likely records from the same table. select_related() helps when you need to read the two related models in one query. This is all very straightforward and in detail described in the documentation
Helps enlightenment view of sql queries after you are done queryset'AMI:
from django.db import connection
Allows you to understand and how many of them were made, and what specific.