diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
index ece96f5..e7bb750 100644
--- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
+++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php
@@ -667,29 +667,36 @@ protected function attachPropertyData(array &$entities) {
       $table = $this->revisionDataTable ?: $this->dataTable;
       $query = $this->database->select($table, 'data', array('fetch' => \PDO::FETCH_ASSOC))
         ->fields('data')
-        ->condition($this->idKey, array_keys($entities))
+        ->condition('data.' . $this->idKey, array_keys($entities))
         ->orderBy('data.' . $this->idKey);
 
+      $table_mapping = $this->getTableMapping();
+      $translations = array();
+
       if ($this->revisionDataTable) {
+        $data_fields = array_diff($table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable));
+
+        // Are there any fields unique to dataTable, that are not IDs or revisionable?
+        $data_fields_static = array_diff($table_mapping->getFieldNames($this->dataTable), $table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable));
+        if ($data_fields_static) {
+          $data_fields = array_merge($data_fields, $data_fields_static);
+
+          $query->leftJoin($this->dataTable, 'static', "(data.$this->idKey = static.$this->idKey)");
+          $query->fields('static', $data_fields_static);
+        }
+
         // Get the revision IDs.
         $revision_ids = array();
         foreach ($entities as $values) {
           $revision_ids[] = is_object($values) ? $values->getRevisionId() : $values[$this->revisionKey][LanguageInterface::LANGCODE_DEFAULT];
         }
-        $query->condition($this->revisionKey, $revision_ids);
-      }
-
-      $data = $query->execute();
-
-      $table_mapping = $this->getTableMapping();
-      $translations = array();
-      if ($this->revisionDataTable) {
-        $data_fields = array_diff($table_mapping->getFieldNames($this->revisionDataTable), $table_mapping->getFieldNames($this->baseTable));
+        $query->condition('data.' . $this->revisionKey, $revision_ids);
       }
       else {
         $data_fields = $table_mapping->getFieldNames($this->dataTable);
       }
 
+      $data = $query->execute();
       foreach ($data as $values) {
         $id = $values[$this->idKey];
 
diff --git a/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
index d484c8b..56ab96b 100644
--- a/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
+++ b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php
@@ -57,6 +57,7 @@ protected function assertRevisions($entity_type) {
     $entity = entity_create($entity_type, array(
       'name' => 'foo',
       'user_id' => $this->web_user->id(),
+      'foo' => $this->randomMachineName(32),
     ));
     $entity->field_test_text->value = 'bar';
     $entity->save();
@@ -64,6 +65,7 @@ protected function assertRevisions($entity_type) {
     $names = array();
     $texts = array();
     $revision_ids = array();
+    $foo = 0;
 
     // Create three revisions.
     $revision_count = 3;
@@ -76,6 +78,7 @@ protected function assertRevisions($entity_type) {
       $entity->setNewRevision(TRUE);
       $names[] = $entity->name->value = $this->randomMachineName(32);
       $texts[] = $entity->field_test_text->value = $this->randomMachineName(32);
+      $foo = $entity->foo->value = $i * 2;
       $entity->save();
       $revision_ids[] = $entity->revision_id->value;
 
@@ -93,6 +96,10 @@ protected function assertRevisions($entity_type) {
       $this->assertEqual($entity_revision->revision_id->value, $revision_ids[$i], format_string('%entity_type: Revision ID matches.', array('%entity_type' => $entity_type)));
       $this->assertEqual($entity_revision->name->value, $names[$i], format_string('%entity_type: Name matches.', array('%entity_type' => $entity_type)));
       $this->assertEqual($entity_revision->field_test_text->value, $texts[$i], format_string('%entity_type: Text matches.', array('%entity_type' => $entity_type)));
+
+      // Check 'data_table' values are loaded.
+      $this->assertTrue(isset($entity_revision->foo->value), format_string('%entity_type: Non-revisioned field is loaded.', array('%entity_type' => $entity_type)));
+      $this->assertEqual($entity_revision->foo->value, $foo, format_string('%entity_type: Non-revisioned field value is the same across revisions.', array('%entity_type' => $entity_type)));
     }
 
     // Confirm the correct revision text appears in the edit form.
diff --git a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
index 3b9309d..759a30e 100644
--- a/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
+++ b/core/modules/system/tests/modules/entity_test/src/Entity/EntityTest.php
@@ -120,6 +120,11 @@ public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {
         ),
       ));
 
+    $fields['foo'] = BaseFieldDefinition::create('integer')
+      ->setLabel(t('Foo'))
+      ->setReadOnly(TRUE)
+      ->setRevisionable(FALSE);
+
     return $fields;
   }
 
