Yep, it is intended that cities cost 0 moves to pass through.
Sorry but you are wrong
They don't just cost 0 move, if they did I could always enter a city as long as I were next to it, even with 0 movement point left! (which would be preferable to what happens now, which is trying to attack a unit next to my city and instead being carried outside in a random tile chosen by the game, thus maybe exploiting the last movement point. Result: I tried to attack a unit NEXT TO ME but I don't reach it, instead I end up OUTSIDE the city I was trying to defend, with 0 movement points, and now the enemy can take my empty city!!!)
TEST THIS: Try and see what happens when you have one movement point left and try to attack a unit outside the city where you are.You walk out but don't manage to attack: city ends up empty!
Also if you are in a city and try to move a unit let's say 5 tiles away this is what happens now: you select the unit, you click 5 tiles away, the game removes that unit from the city making it appear a couple of tiles outside the city IN A PLACE AND DIRECTION WHICH IS NOT NECESSARILY THE ONE INTENDED, then tries to move it to the tile selected as destination (sometimes wasting movement points because pathfinding is badly implemented).
As a general rule if you can move from tile A to tile B in one turn the opposite should also be possible in the following turn, but it is not the case because before the unit starts to move it pops out of the city a couple of tiles away ... In fact I usually cannot exit a city moving by my whole amount of movement points and then go back the turn after (that is particularly evident when forest tiles are involved, because when I moved out the city I just jumped them).
I understand the idea of shaping cities to control the land and I like it, but that was not what I was talking about.