My question is about what it is - at the subatomic level - that determines the charge on atoms which participate in covalent bonding in reality. I understand that formal charge is just that - it's a formality, which gives human beings a very useful tool for modelling reality and making predictions. I, though, would like to know what is responsible for the charge we find in covalently bonded molecules.
Let me explain. If we picture an ionic bond as a highly polar covalent bond, we can see that in an atom like NaCl we have the state of affairs where the highly electronegative chlorine atom has "pulled away" an electron from the sodium atom.
(Orbitals omitted for ease of drawing)
Ultimately this means that Na, with its 11 protons has just 10 electrons, which gives it a positive charge, while Cl, with its 17 protons, now has 18 electrons, giving it a negative charge. Electrostatic forces between the two nuclei result in the bond.
Of course, it might be more accurate to say that the Na nucleus simply ceases to be significantly affected by its former 3s1 electron. As a result the 11 protons in the Na nucleus, which result in a +11 charge, are countered by only 10 electrons, giving a +1 charge overall. Meanwhile, the 17 protons of the Cl nucleus (+17 charge) experience the negative charge of 18 electrons (-18) giving a -1 charge overall.
Let's compare this with the situation we find in the carbonate ion. (Link) For the purposes of my question I won't worry too much about resonance, I don't mind too much whether we have the accurate -2/3 charge, but let's keep it simple and just look at one of the contributing structures.
(Orbitals again omitted for ease of drawing. Orange indicates an additional electron from some other source. Oxygen has only eight electrons ordinarily, but one will be gained when forming this ion)
In this case we have covalent bonding. In the case of the singly bonded oxygens, we have 8 protons and 10 electrons. This is two more negatively charged electrons than positively charged protons. This, though, is not ionic bonding, it is covalent bonding and the polarisation is not such that the electron contributed by carbon dissociates completely from the Carbon. Instead it is "shared" between the two. Nevertheless, the "sharing" is not equal and oxygen attracts the electrons more strongly than the carbon, so we have a -1 charge.
My question, though, is - why is it that the charge works out like this? Why is it that when you have oxygen (8 protons) (charge of +8) and a filled outer shell (8 electrons plus buried inner core gives -10 (charge of -1 on each electron)) you have a charge of -1 not -2, is it simply the covalent bond, is it simply the fact that the two electrons in the sigma bond are sufficiently far enough away in reality?
But then why should it be that the doubly bonded oxygen, which also has ten electrons surrounding it, has no charge at all? Meanwhile, the carbon atom in the middle is surrounded by 10 electrons also, whereas it has only 6 protons and yet carries no charge at all.
Naively the answer seems obvious. The bonds are covalent and the electrons are "shared." So, in the double bond (which, of course, has a different nature to the single bond) one must assume that the electrons are positioned in such away that they are balanced by the protons of the oxygen nuclei. There is therefore no charge on this atom.
In the case of the Carbon atom we surely again understand that the right balance of charges and distance from the nucleus is arrived at.
Overall we have 32 electrons and 30 protons so the overall -2 charge on the whole atom makes sense.
The ultimate question I've been trying to lead up to is what is it that dictates the distribution of charge. What is the difference - at the subatomic level - between two ionically bonded atoms, a covalently bonded molecule like the CO32- ion which carries a charge, and a covalently bonded molecule like H2O - which is also polar (hence we can have hydrogen bonding) but isn't usually assigned a charge. On what basis do we assign charge?