diff --git a/lib/closure_tree/hash_tree.rb b/lib/closure_tree/hash_tree.rb
index f8be73b..388be65 100644
--- a/lib/closure_tree/hash_tree.rb
+++ b/lib/closure_tree/hash_tree.rb
@@ -11,7 +11,11 @@ def hash_tree(options = {})
       # There is no default depth limit. This might be crazy-big, depending
       # on your tree shape. Hash huge trees at your own peril!
       def hash_tree(options = {})
-        _ct.hash_tree(_ct.default_tree_scope(all, options[:limit_depth]))
+        if options[:limit_depth]
+          _ct.hash_tree(_ct.default_tree_scope(all, options[:limit_depth]))
+        else
+          _ct.hash_tree(all)
+        end
       end
     end
   end
diff --git a/test/support/tag_examples.rb b/test/support/tag_examples.rb
index 71553cb..77b5bf7 100644
--- a/test/support/tag_examples.rb
+++ b/test/support/tag_examples.rb
@@ -761,9 +761,19 @@ def assert_parent_and_children
             assert_equal @full_tree, @tag_class.hash_tree(limit_depth: 4)
           end
 
+          it 'joins the default scope when a limit_depth is given' do
+            queries = sql_queries { @tag_class.hash_tree(limit_depth: 2) }
+            assert queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) }
+          end
+
           it 'no limit' do
             assert_equal @full_tree, @tag_class.hash_tree
           end
+
+          it 'does not join the default scope when there is no limit' do
+            queries = sql_queries { @tag_class.hash_tree }
+            assert_equal queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) }, false
+          end
         end
 
         describe '.hash_tree' do
@@ -805,6 +815,16 @@ def assert_parent_and_children
             assert_equal @full_tree[@a], @a.children.hash_tree
           end
 
+          it 'joins the default scope when a limit_depth is given' do
+            queries = sql_queries { @a.self_and_descendants.hash_tree(limit_depth: 2) }
+            assert queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) }
+          end
+
+          it 'does not join the default scope when there is no limit' do
+            queries = sql_queries { @a.self_and_descendants.hash_tree }
+            assert_equal queries.any? { |query| query.match?(%r{INNER JOIN \( SELECT descendant_id, MAX\(generations\) as depth}) }, false
+          end
+
           it 'limit_depth 3 from b.parent' do
             assert_equal @three_tree.slice(@a), @b.parent.hash_tree(limit_depth: 3)
           end
@@ -899,8 +919,6 @@ def assert_parent_and_children
           @c3 = @tag_class.find_or_create_by_path %w[a3 b3 c3]
           @b3 = @c3.parent
           @a3 = @b3.parent
-
- 
         end
 
         it 'should return 0 for root' do