Confusion with @include and @skip directives

Hello, I have a question regarding GraphQL @skip and @include directives. If I have a query like so:

query getUsers {
  users {
    id
    name @include(if: false)
    email
    role
  }
}

This stops the name field from being returned in the Graph response. However, does this still send the request for name to the backend layer and it simply doesn’t return it in the response? So if I set set name to name @include(if: false) is this the same as sending:

query getUsers {
  users {
    id
    email
    role
  }
}

Finally, how does @skip differ from @include ? Is it just the opposite or is there some functional difference?

The field’s resolvers won’t run. These features are rarely used with constant arguments; it’s more likely that you’ll use them with a variable, so that you can have a single operation that can be used from your client in various circumstances which may or may not need parts of the response. This goes especially well with something like Apollo Client Web’s useQuery: a single useQuery call can adapt to needing or not needing various data. skip and include are identical except for they treat their arguments as the opposite; one might just read better than the other in a particular use case.