There are two kinds of builds: clean builds and incremental.
A clean build always starts from scratch: it takes nothing but the bare project as input, figures out dependencies, and builds all the parts in order, then assembles them into the final output. A clean build, by definition, has to recompile all the source files in your project; while doing this, it produces intermediate files, such as
.obj files, which are neither source nor shippable binaries - once the build is complete, you could throw them away (which is what
Build>Clean Solution is supposed to do), or you can leave them in place for later, which brings us to...
Incremental builds. An incremental build compares every source file's last-modified date to the timestamp on the intermediate files it produces, as well as anything else that depends on it ('targets'); if any dependency has been modified after the target was last built, the target is rebuilt, otherwise the file from the previous build is reused. For example, if you have
users.c, which gets compiled into
users.obj (a build target) and includes
basics.h (dependencies), then the incremental build would check the timestamps on all these files, and if any of them is newer than the one on
users.obj gets rebuilt; otherwise, the existing
users.obj is considered valid, and this particular build step can be skipped.
Because incremental builds only rebuild what needs to be, they are typically much faster than clean builds - for large but well-structured projects, the difference can be one of mere seconds vs. lunch break.
However, correctly determining dependencies borders on black magic, and some overall settings invalidate all intermediates (e.g. if you switch target architecture), so if you want "the real thing", most people will recommend doing a complete clean build. In fact, pretty much all Continuous Integration setups (where a build server executes a complete build each time new code gets pushed to the master repository, fully automated) use clean builds, simply because they are the only reliable way of making sure everything is really really up-to-date.