diff --git a/core/modules/comment/src/Plugin/views/field/EntityLink.php b/core/modules/comment/src/Plugin/views/field/EntityLink.php
index de41b9e..8b5645c 100644
--- a/core/modules/comment/src/Plugin/views/field/EntityLink.php
+++ b/core/modules/comment/src/Plugin/views/field/EntityLink.php
@@ -27,6 +27,13 @@ class EntityLink extends FieldPluginBase {
    */
   protected $build;
 
+  /**
+   * {@inheritdoc}
+   */
+  public function isComputed() {
+    return TRUE;
+  }
+
   protected function defineOptions() {
     $options = parent::defineOptions();
     $options['teaser'] = array('default' => FALSE);
@@ -44,8 +51,6 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     parent::buildOptionsForm($form, $form_state);
   }
 
-  public function query() {}
-
   /**
    * Implements \Drupal\views\Plugin\views\field\FieldPluginBase::pre_render().
    */
diff --git a/core/modules/comment/src/Plugin/views/field/Link.php b/core/modules/comment/src/Plugin/views/field/Link.php
index cd5506d..d3927f0 100644
--- a/core/modules/comment/src/Plugin/views/field/Link.php
+++ b/core/modules/comment/src/Plugin/views/field/Link.php
@@ -59,6 +59,14 @@ public function __construct(array $configuration, $plugin_id, $plugin_definition
     $this->entityManager = $entity_manager;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function isComputed() {
+    return TRUE;
+  }
+
+
   protected function defineOptions() {
     $options = parent::defineOptions();
     $options['text'] = array('default' => '');
@@ -80,8 +88,6 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     parent::buildOptionsForm($form, $form_state);
   }
 
-  public function query() {}
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/content_translation/src/Plugin/views/field/TranslationLink.php b/core/modules/content_translation/src/Plugin/views/field/TranslationLink.php
index 3727fb7..9f1a7ac 100644
--- a/core/modules/content_translation/src/Plugin/views/field/TranslationLink.php
+++ b/core/modules/content_translation/src/Plugin/views/field/TranslationLink.php
@@ -72,16 +72,18 @@ protected function renderLink(EntityInterface $entity, ResultRow $values) {
   }
 
   /**
-   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::query().
+   * {@inheritdoc}
    */
-  public function query() {
+  public function clickSortable() {
+    return FALSE;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function clickSortable() {
-    return FALSE;
+  public function isComputed() {
+    return TRUE;
   }
 
+
 }
diff --git a/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php b/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php
index 684e4b7..87a5e3d 100644
--- a/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php
+++ b/core/modules/contextual/src/Plugin/views/field/ContextualLinks.php
@@ -134,6 +134,4 @@ public function render(ResultRow $values) {
     }
   }
 
-  public function query() { }
-
 }
diff --git a/core/modules/system/src/Plugin/views/field/BulkForm.php b/core/modules/system/src/Plugin/views/field/BulkForm.php
index 06a7d3a..447a9d9 100644
--- a/core/modules/system/src/Plugin/views/field/BulkForm.php
+++ b/core/modules/system/src/Plugin/views/field/BulkForm.php
@@ -299,16 +299,17 @@ public function viewsFormValidate(&$form, FormStateInterface $form_state) {
   }
 
   /**
-   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::query().
+   * {@inheritdoc}
    */
-  public function query() {
+  public function clickSortable() {
+    return FALSE;
   }
 
   /**
    * {@inheritdoc}
    */
-  public function clickSortable() {
-    return FALSE;
+  public function isComputed() {
+    return TRUE;
   }
 
 }
diff --git a/core/modules/views/src/Plugin/views/field/Counter.php b/core/modules/views/src/Plugin/views/field/Counter.php
index cfd5d1e..7db0a08 100644
--- a/core/modules/views/src/Plugin/views/field/Counter.php
+++ b/core/modules/views/src/Plugin/views/field/Counter.php
@@ -26,6 +26,12 @@ public function usesGroupBy() {
     return FALSE;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function isComputed() {
+    return TRUE;
+  }
 
   protected function defineOptions() {
     $options = parent::defineOptions();
@@ -45,10 +51,6 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
     parent::buildOptionsForm($form, $form_state);
   }
 
-  public function query() {
-    // do nothing -- to override the parent query.
-  }
-
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/views/src/Plugin/views/field/Custom.php b/core/modules/views/src/Plugin/views/field/Custom.php
index c59f3df..e228081 100644
--- a/core/modules/views/src/Plugin/views/field/Custom.php
+++ b/core/modules/views/src/Plugin/views/field/Custom.php
@@ -26,8 +26,11 @@ public function usesGroupBy() {
     return FALSE;
   }
 
-  public function query() {
-    // do nothing -- to override the parent query.
+  /**
+   * {@inheritdoc}
+   */
+  public function isComputed() {
+    return TRUE;
   }
 
   protected function defineOptions() {
diff --git a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
index f13b8db..d9375da 100644
--- a/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/src/Plugin/views/field/FieldPluginBase.php
@@ -124,12 +124,15 @@ protected function allowAdvancedRender() {
    * Called to add the field to a query.
    */
   public function query() {
-    $this->ensureMyTable();
-    // Add the field.
-    $params = $this->options['group_type'] != 'group' ? array('function' => $this->options['group_type']) : array();
-    $this->field_alias = $this->query->addField($this->tableAlias, $this->realField, NULL, $params);
+    // Computed fields have no business with the query.
+    if (!$this->isComputed()) {
+      $this->ensureMyTable();
+      // Add the field.
+      $params = $this->options['group_type'] != 'group' ? array('function' => $this->options['group_type']) : array();
+      $this->field_alias = $this->query->addField($this->tableAlias, $this->realField, NULL, $params);
 
-    $this->addAdditionalFields();
+      $this->addAdditionalFields();
+    }
   }
 
   /**
@@ -213,6 +216,22 @@ public function clickSortable() {
   }
 
   /**
+   * Determines if this field is computed or not.
+   *
+   * The default query behavior will be be invoked if this is FALSE.
+   *
+   * The base implementation of this method always returns FALSE and
+   * no property is provided to override it. This is because implementing
+   * a computed field always involves creating a subclass. Providing a
+   * 'computed' property was thought to be more dangerous than useful.
+   *
+   * @return bool
+   */
+  public function isComputed() {
+    return FALSE;
+  }
+
+  /**
    * Get this field's label.
    */
   public function label() {
@@ -796,7 +815,7 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
             ':input[name="options[alter][make_link]"]' => array('checked' => TRUE),
           ),
         ),
-       '#options' => array(
+        '#options' => array(
           'none' => $this->t('No transform'),
           'upper' => $this->t('Upper case'),
           'lower' => $this->t('Lower case'),
@@ -1750,4 +1769,3 @@ protected function linkGenerator() {
 /**
  * @}
  */
-
diff --git a/core/modules/views/src/Plugin/views/field/Links.php b/core/modules/views/src/Plugin/views/field/Links.php
index b8f4098..745b017 100644
--- a/core/modules/views/src/Plugin/views/field/Links.php
+++ b/core/modules/views/src/Plugin/views/field/Links.php
@@ -26,6 +26,13 @@ public function usesGroupBy() {
   }
 
   /**
+   * {@inheritdoc}
+   */
+  public function isComputed() {
+    return TRUE;
+  }
+
+  /**
    * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::defineOptions().
    */
   public function defineOptions() {
@@ -96,10 +103,4 @@ protected function getLinks() {
     return $links;
   }
 
-  /**
-   * Overrides \Drupal\views\Plugin\views\field\FieldPluginBase::query().
-   */
-  public function query() {
-  }
-
 }
