title: Apollo Client refetch() is not updating cache when the response from server is empty list
body: <p>I am using <code>refetch()</code> whenever the variables of the useQuery changes in order to filter the list. Every time a variable prop is changed it fetches the results according to the filters, when the results from the server are empty list [], the refetch() method returns the cached results and not the empty list [].</p>
  <pre><code>const { loading, error, data, fetchMore, refetch } = useQuery(Users, {
      variables: {
        userNumber: userNum,
      },
    });
  
  useEffect(() =&gt; {
      if (userNum){
        refetch();
      } 
      }, [userNum]);
  </code></pre>
  <p>So it fetches the updated result every time userNum prop changes with the list of users that have this userNum however, if the list of users returned from the server is empty (as no user have this number), I can see the previous cached results instead of an empty list.</p>
  <p>I have tried</p>
  <pre><code>fetchPolicy: 'cache-and-network', 
  nextFetchPolicy: 'cache-first', 
  </code></pre>
  <p>and still get the cached results instead of the empty list.</p>
  <p>I have also tried the merge() in typePolicies and it worked! However when I apply the relayStylePagination it fetches again the cached results and not the empty list.</p>
  <pre><code>uri: 'http://localhost:5000/graphql',
  cache: new InMemoryCache({
    typePolicies: {
      Query: {
        fields: {
          devices: relayStylePagination(),
          merge(existing = {}, incoming) {
            return { ...existing, ...incoming };
          },
        },
      },
    },
  }),
  });
  </code></pre>
  <p>I have also tried with keyfields and again is working the cached are updated when the server is returning empty list, however the relay pagination is not working. The only way to have the relay pagination work is to place it only like this:</p>
  <pre><code>fields: {
            devices: relayStylePagination(),
          },
  </code></pre>
  <p>`
  My query is like this:</p>
  <pre><code> $after: ID
   $userNum: Int
   $dpiGt: String
   $dpiLt: String
  ) {
   users(
     after: $after
     userNumber: $userNum
     first: 30
     filter: { dpiGt: $dpiGt, dpiLt: $dpiLt }
   ) {
     edges {
       cursor
       node {
         id
         name
         userNumber
       }
     }
     pageInfo {
       endCursor
       hasNextPage
     }
   }
  }
  </code></pre>
  <p>System details:</p>
  <pre><code>OS: macOS 10.15.4
  Binaries:
  Node: 12.16.1 - ~/n/bin/node
  Yarn: 1.21.1 - /usr/local/bin/yarn
  npm: 6.13.4 - ~/n/bin/npm
  Browsers:
  Chrome: 86.0.4240.80
  Firefox: 81.0.1
  Safari: 13.1
  npmPackages:
  @apollo/client: ^3.2.3 =&gt; 3.2.5
  </code></pre>