The result is the same with the Geocoding API web-service. This request
http://maps.googleapis.com/maps/api/geocode/json?address=barcelona&sensor=false
also gives the city data as a response, even with using different component filters
.
I tried to geocode New York for a comparison:
http://maps.googleapis.com/maps/api/geocode/json?address=new+york&sensor=false
The result is the same. It seems if a city and a region exists, the response contains only the city (the last link in the hierarchy).