Dijkstra is a special case for A* (when the heuristics is zero).
What previous poster said, plus because Dijkstra has no heuristic and at each step picks edges with smallest cost it tends to "cover" more of your graph. Because of that Dijkstra could be more useful than A*. Good example is when you have several candidate target nodes, but you don't know, which one is closest (in A* case you would have to run it multiple times: once for each candidate node).
Dijkstra's algorithm would never be used for pathfinding. Using A* is a no-brainer if you can come up with a decent heuristic (usually easy for games, especially in 2D worlds). Depending on the search space, Iterative Deepening A* is sometimes preferable because it uses less memory.
Dijkstra algorithm finds the shortest path definitely. On the other hand A* depends on the heuristic. For this reason A* is faster that A* and give good results if you have a good heuristic.
Dijkstra finds the minimum costs from the starting node to all others. A* finds the minimum cost from the start node to the goal node.
Therefore it would seem that Dijkstra would be less efficient when all you need is the minimum distance from one node to another.