Index: django/db/models/sql/query.py
===================================================================
--- django/db/models/sql/query.py	(revision 11530)
+++ django/db/models/sql/query.py	(working copy)
@@ -1342,7 +1342,7 @@
         (for example, cur_depth=1 means we are looking at models with direct
         connections to the root model).
         """
-        if not restricted and self.max_depth and cur_depth > self.max_depth:
+        if not restricted and self.max_depth is not None and cur_depth > self.max_depth:
             # We've recursed far enough; bail out.
             return
 
Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 11530)
+++ django/db/models/query.py	(working copy)
@@ -540,7 +540,7 @@
         If fields are specified, they must be ForeignKey fields and only those
         related objects are included in the selection.
         """
-        depth = kwargs.pop('depth', 0)
+        depth = kwargs.pop('depth', None)
         if kwargs:
             raise TypeError('Unexpected keyword arguments to select_related: %s'
                     % (kwargs.keys(),))
@@ -551,7 +551,7 @@
             obj.query.add_select_related(fields)
         else:
             obj.query.select_related = True
-        if depth:
+        if depth is not None:
             obj.query.max_depth = depth
         return obj
 
@@ -947,13 +947,13 @@
     value_annotation = False
 
 
-def get_cached_row(klass, row, index_start, max_depth=0, cur_depth=0,
+def get_cached_row(klass, row, index_start, max_depth=None, cur_depth=0,
                    requested=None, offset=0, only_load=None):
     """
     Helper function that recursively returns an object with the specified
     related attributes already populated.
     """
-    if max_depth and requested is None and cur_depth > max_depth:
+    if max_depth is not None and requested is None and cur_depth > max_depth:
         # We've recursed deeply enough; stop now.
         return None
 
Index: tests/modeltests/select_related/models.py
===================================================================
--- tests/modeltests/select_related/models.py	(revision 11530)
+++ tests/modeltests/select_related/models.py	(working copy)
@@ -147,6 +147,32 @@
 >>> len(db.connection.queries)
 5
 
+# If depth=0 then it shouldn't do the select_related
+>>> db.reset_queries()
+>>> world = Species.objects.all().select_related(depth=0)
+>>> [o.genus.family.order for o in world]
+[<Order: Diptera>, <Order: Primates>, <Order: Fabales>, <Order: Agaricales>]
+>>> len(db.connection.queries)
+13
+
+# If depth=0 then it shouldn't do the select_related
+>>> db.reset_queries()
+>>> world = Species.objects.all().select_related('genus').select_related(depth=0)
+>>> [o.genus.family.order for o in world]
+[<Order: Diptera>, <Order: Primates>, <Order: Fabales>, <Order: Agaricales>]
+>>> len(db.connection.queries)
+13
+
+# If depth=0 then it shouldn't do the select_related even if a previous select
+# related was set on the query
+>>> db.reset_queries()
+>>> world = Species.objects.all().select_related('genus').select_related(depth=0)
+>>> [o.genus.family.order for o in world]
+[<Order: Diptera>, <Order: Primates>, <Order: Fabales>, <Order: Agaricales>]
+>>> len(db.connection.queries)
+13
+
+
 >>> s = Species.objects.all().select_related(depth=1).extra(select={'a': 'select_related_species.id + 10'})[0]
 >>> s.id + 10 == s.a
 True
Index: docs/ref/models/querysets.txt
===================================================================
--- docs/ref/models/querysets.txt	(revision 11530)
+++ docs/ref/models/querysets.txt	(working copy)
@@ -577,6 +577,14 @@
     p = b.author         # Doesn't hit the database.
     c = p.hometown       # Requires a database call.
 
+You can also use the ``depth`` argument to cancel an existing 
+``select_related()`` on the query by setting ``depth`` to "0". For example 
+these three queries are equivalent::
+
+    b = Book.objects.get(id=4)
+    b = Book.objects.select_related(depth=0).get(id=4)
+    b = Book.objects.select_related('author').select_related(depth=0).get(id=4)
+
 Sometimes you only want to access specific models that are related to your root
 model, not all of the related models. In these cases, you can pass the related
 field names to ``select_related()`` and it will only follow those relations.
