diff --git a/django/db/models/query.py b/django/db/models/query.py
index 41c24c7..9cadbf0 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1027,7 +1027,7 @@ class ValuesQuerySet(QuerySet):
 
     def _as_sql(self, connection):
         """
-        For ValueQuerySet (and subclasses like ValuesListQuerySet), they can
+        For ValuesQuerySet (and subclasses like ValuesListQuerySet), they can
         only be used as nested queries if they're already set up to select only
         a single field (in which case, that is the field column that is
         returned). This differs from QuerySet.as_sql(), where the column to
@@ -1233,6 +1233,21 @@ class EmptyQuerySet(QuerySet):
             kwargs[arg.default_alias] = arg
         return dict([(key, None) for key in kwargs])
 
+    def values(self, *args):
+        """
+        Technically, this should return an EmptyValuesQuerySet (a subclass
+        of both this and ValuesQuerySet classes). However, we return just
+        EmptyQuerySet.
+        """
+        return self
+    
+    def values_list(self, *args, **kwargs):
+        """
+        Similarly to above, this should return an EmptyValuesListQuerySet.
+        However, this returns just EmptyQuerySet.
+        """
+        return self
+
     # EmptyQuerySet is always an empty result in where-clauses (and similar
     # situations).
     value_annotation = False
diff --git a/tests/regressiontests/queries/tests.py b/tests/regressiontests/queries/tests.py
index ded3e8f..82e083d 100644
--- a/tests/regressiontests/queries/tests.py
+++ b/tests/regressiontests/queries/tests.py
@@ -1612,12 +1612,27 @@ class CloneTests(TestCase):
 
 
 class EmptyQuerySetTests(TestCase):
+    def setUp(self):
+        # Addition for ticket #17712: have actually some data in the numbers
+        # table, so that the below tests could return something.
+        Number.objects.create(num=1)
+
     def test_emptyqueryset_values(self):
         # #14366 -- Calling .values() on an EmptyQuerySet and then cloning that
         # should not cause an error"
         self.assertQuerysetEqual(
             Number.objects.none().values('num').order_by('num'), []
         )
+    
+    def test_emptyqueryset_values_empty(self):
+        # #17712 none().values() / .none().values_list() should not return
+        # anything
+        self.assertQuerysetEqual(
+            Number.objects.none().values('num'), []
+        )
+        self.assertQuerysetEqual(
+            Number.objects.none().values_list('num'), []
+        )
 
     def test_values_subquery(self):
         self.assertQuerysetEqual(
