diff --git a/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php b/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
index be83d28f823733d7ac7add0adf9dc6ab3c01e406..b51bb031b75309e291559d636dcec5e7f3e13156 100644
--- a/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
@@ -160,6 +160,12 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     protected $is_join;
 
     /**
+     * SQL Query part: Boolean identifying if we are joining tables
+     * @var Boolean
+     */
+    protected $is_natural_join;
+
+    /**
      * Constructor.
      */
     public function __construct()
@@ -186,6 +192,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
         $this->select_statement = '';
         $this->compound         = '';
         $this->is_join          = FALSE;
+        $this->is_natural_join  = FALSE;
     }
 
     /**
@@ -215,6 +222,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
         unset($this->values);
         unset($this->select_statement);
         unset($this->is_join);
+        unset($this->is_natural_join);
     }
 
     /**
@@ -458,6 +466,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     protected function sql_join($table_reference, $type, $index_hints = NULL)
     {
         $type = strtoupper($type);
+
         $join = ($type == 'STRAIGHT') ? 'STRAIGHT_JOIN ' : ltrim($type . ' JOIN ');
 
         if ($this->join != '')
@@ -467,7 +476,16 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
 
         $this->join .= $join . $table_reference . $this->prepare_index_hints($index_hints);
 
-        $this->is_join = TRUE;
+        $split_type = explode(' ', $type);
+
+        if ($split_type[0] == 'NATURAL')
+        {
+            $this->is_natural_join = TRUE;
+        }
+        else
+        {
+            $this->is_join = TRUE;
+        }
     }
 
     /**
@@ -778,11 +796,18 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
      */
     public function sql_group_start($condition = 'WHERE')
     {
-        $condition = ($condition === 'ON') ? 'join' : strtolower($condition);
+        $condition = ($condition === 'ON' || $this->is_natural_join) ? 'join' : strtolower($condition);
 
         if ($this->is_join)
         {
-            $this->$condition .= 'ON ';
+            if ($this->is_natural_join)
+            {
+                $this->$condition .= ' ';
+            }
+            else
+            {
+                $this->$condition .= 'ON ';
+            }
             $this->is_join     = FALSE;
         }
         elseif ($this->connector != '')
diff --git a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php
index 5e6a1d99654fc2e6abc22fdca86d43dcd512c3ea..7001b1e3628fa1397ab83e71f14affee5a3bdc44 100644
--- a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php
+++ b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php
@@ -192,6 +192,20 @@ class DatabaseDMLQueryBuilderQueryPartsJoinTest extends DatabaseDMLQueryBuilderT
     }
 
     /**
+     * Test that specifying a join clause sets the property is_natural_join.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_join
+     */
+    public function testNaturalJoin()
+    {
+        $method = $this->get_accessible_reflection_method('sql_join');
+
+        $method->invokeArgs($this->class, [ 'table', 'NATURAL LEFT' ]);
+
+        $this->assertTrue($this->get_reflection_property_value('is_natural_join'));
+    }
+
+    /**
      * Test that specifying a join clause sets the property is_join.
      *
      * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_join
diff --git a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
index b6e6561490ed4d3742e213f561a8db6eb504a834..45d5a3aedb2cee7e9d2d204fb76e6a7916fce3e0 100644
--- a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
+++ b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
@@ -248,6 +248,24 @@ class DatabaseDMLQueryBuilderQueryPartsTest extends DatabaseDMLQueryBuilderTest
     }
 
     /**
+     * Test grouping condition start with active join statement.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_group_start
+     */
+    public function testOpenGroupIfNaturalJoin()
+    {
+        $this->set_reflection_property_value('is_join', TRUE);
+        $this->set_reflection_property_value('is_natural_join', TRUE);
+
+        $method = $this->get_accessible_reflection_method('sql_group_start');
+
+        $method->invokeArgs($this->class, [ 'WHERE' ]);
+
+        $this->assertEquals(' (', $this->get_reflection_property_value('join'));
+        $this->assertFalse($this->get_reflection_property_value('is_join'));
+    }
+
+    /**
     * Test grouping condition start.
     *
     * @param String $keyword   The expected statement keyword
