Dependencies are downloaded and compiled once for all your projects using the same Stackage release and are shared between projects.
In the end you still might have duplicated dependencies if you use different stackage.org releases but it's a much better situation than using Cabal sandboxes where every project has its own copy of dependencies.