There is basically no difference. However, exit() is useful because it allows you to exit the program from other functions different than main().
The only formal difference is that:
...the lifetimes of objects with automatic storage duration declared in main will have ended...
in the case of returning from main.
If you need more details, I suggest you read the latest C standard, in particular section 5.1.2.2.3:
...a return from the initial call to the main function is equivalent to calling the exit function with the value returned by the main function as its argument...
As well as section 7.22.4.4:
The exit function causes normal program termination to occur...
Note that there are also other ways to exit a program, like abort, quick_exit and _Exit.