First of all, ELPA is the name of a specification, the Emacs Lisp Package Archive. There's three widely known implementations of that specification, GNU ELPA, Marmalade and MELPA.
GNU ELPA is the official GNU Emacs archive, enabled out of the box for sufficiently new Emacs installations. It is comparatively small, contributing to it requires copyright assignment and cooperating with the official mailing list. It is the closest thing we have to a vetting comparable to a Linux distribution package archive.
Marmalade is an unofficial archive with a good amount of versioned packages. Authors and maintainers need to upload their releases manually to it. Vetting is done once for every new member before allowing them to have an user account, after that is done, they are free to release as they wish.
MELPA is another unofficial archive with the largest amount of packages. Each package is briefly vetted for code style with its pull request for inclusion, after that packages are automatically built from their (usually VCS) sources. Rebuilds can happen every hour. There is also MELPA stable which builds tagged releases only, but has a lot less packages, less even than Marmalade.
As for the overlap, there is practically no overlap between GNU ELPA and Marmalade, and similarly for GNU ELPA and MELPA. Marmalade and MELPA however overlap a fair amount. I'd estimate that most of Marmalade is a subset of MELPA. That's why you can go with MELPA for most packages and maybe GNU ELPA for a few missing ones.
Update: According to malabarba's package stats MELPA Stable did surpass Marmalade in number of available packages. I'd pick it over Marmalade now.
Update: Marmalade is essentially dead. The certificate has expired and there's hardly any new packages uploaded. This is due to its rather unusual process, you need to be manually added to the users by its owner and as he's gone missing, no new users have been added since 2016 or so.