title: Django Queryset filter equivalency to SQL
body: <p>To me, it is not clear or lack of example code to understand the documentation about how SQL language is internally used in Django ORM.</p>
  <p>My intended SQL is:</p>
  <pre><code>SELECT projects_category.id, projects_category.name, projects_project.name
  FROM projects_category
      JOIN projects_project_categories
          ON projects_category.id = projects_project_categories.project_id
      JOIN projects_project
          ON projects_project_categories.project_id=projects_project.id
              WHERE NOT projects_project.is_mini ORDER BY projects_category.id;
  </code></pre>
  <p>How to do the same in Django ORM or in Django view?
  I have tried filter and exclude (probably with the wrong arguments...) and it does not seem working according to output. There might be more options besides these two.</p>
  <p>Also, any other trick would be appreciable.</p>
  <p>My relevant models below:</p>
  <pre><code>class Project(models.Model):
      name = models.CharField(max_length=100)
      is_mini = models.BooleanField(default=False)
      categories = models.ManyToManyField('Category', blank=True)
  
      def __str__(self):
          return self.name
  
  class Category(models.Model): # will be used for search
      name = models.CharField(max_length=100)
  
      def __str__(self):
          return self.name
  </code></pre>
  <p>I want to get the queryset that contains category sets that contains project sets that are not mini</p>