diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 6682df9..3020842 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,9 @@
+Next release
+============
+
+Bug fixes
+- #2415597 - Make batching of SQL sources optional, and force map_joinable FALSE.
+
 Migrate 2.7 Release Candidate 1
 ===============================
 
diff --git a/plugins/sources/sql.inc b/plugins/sources/sql.inc
index a6d3492..fbcd05a 100644
--- a/plugins/sources/sql.inc
+++ b/plugins/sources/sql.inc
@@ -50,11 +50,12 @@ class MigrateSourceSQL extends MigrateSource {
   protected $batch = 0;
 
   /**
-   * Number of records to fetch from the database during each batch.
+   * Number of records to fetch from the database during each batch. A value
+   * of zero indicates no batching is to be done.
    *
    * @var int
    */
-  protected $batchSize = 1000;
+  protected $batchSize = 0;
 
   /**
    * List of available source fields.
@@ -134,6 +135,8 @@ class MigrateSourceSQL extends MigrateSource {
 
     if (isset($options['batch_size'])) {
       $this->batchSize = $options['batch_size'];
+      // Joining to the map table is incompatible with batching, disable it.
+      $options['map_joinable'] = FALSE;
     }
 
     // If we're tracking changes, then we need to fetch all rows to see if
@@ -387,7 +390,9 @@ class MigrateSourceSQL extends MigrateSource {
       }
 
       // 4. Download data in batches for performance.
-      $this->query->range($this->batch * $this->batchSize, $this->batchSize);
+      if ($this->batchSize > 0) {
+        $this->query->range($this->batch * $this->batchSize, $this->batchSize);
+      }
     }
 
     // Save our fixed-up query so getNextBatch() matches it.
@@ -408,7 +413,7 @@ class MigrateSourceSQL extends MigrateSource {
 
     // We might be out of data entirely, or just out of data in the current batch.
     // Attempt to fetch the next batch and see.
-    if (!is_object($row)) {
+    if (!is_object($row) && $this->batchSize > 0) {
       $this->getNextBatch();
       $row = $this->result->fetchObject();
     }
