Lets start when ethernet was coaxial cable, it is obvious that with only one wire (really a pair with the shield) there can only be one baseband signal. All coax ethernet is half duplex, that is, one device transmits and all devices receive the signal. When we start using Twisted Pair we have separate send and receive pairs so in theory a port could send and receive at the same time. (full duplex) Tradition, however, is strong and few early 10baseT devices could do full duplex. (Hubs are always half duplex) Once switches became common, there is no reason but inertia that we can't do full duplex. (I own a number of older switches which can do full duplex at 100baseTX but assume that 10baseT cannot do full duplex, but there is no technical reason for that. Modern equipment allows 10baseT/full duplex just fine)
With 100baseTX and 10/100 switches, full duplex became very popular and it speeds up both individual transactions and the speed of the network as a whole, making it the obvious choice when it is offered as a choice. At this point it would be wonderful if we could ride off into the sunset and put this story to bed, but there are 3 'gotchas'.
1) auto-negotiation of duplex is flawed, in general. The technique used is called N-Way and N-Way does not work if you (the human) set a port to full duplex. If all the ports are set to auto-negotiate, N-Way works, and selects the fastest speed and duplex possible. If some ports are fixed at half duplex, N-Way works to select the speed. But once you start setting any ports to full duplex, you must take complete control of that ethernet connection (both speed and duplex) at both ends. N-way cannot set one end to match an end set to full duplex manually. (N-Way also does not test the wire, so it can fail to set the speed correctly if the wire is not up to the capability of the ports)
2) Some vendors implement the standard in less than standard ways. Without going into a 'my equipment is better than your equipment' war, I find a LOT of Cisco networking gear folks and Apple embedded ethernet NIC folks who choose to hard set the speed and duplex of their gear. Since it adds a great deal of opportunity for horrible throughput, I assume they do so because they must, to make it work.
3) Very few of the fiber ethernet standards allow for auto-negotiation. If you are running fiber links (other than 100baseSX) YOU have to be sure they are identical on both ends. If not, and one end thinks it can transmit AND receive, while the other end think it can transmit OR receive, you will still ping just fine, but throughput will be about 100 times as poor as half duplex. Even worse, if you are running a fiber link with copper to fiber converters on each end, you still must not use auto-negotiate, but hard choose the copper speed/duplex, and be sure the converter enforces this for the fiber as well. Some newer converters allow auto-negotiation on the copper side, but it is rare. It is appealing but wrong to think that because you are plugging copper into the switch itself, you can ignore duplex in this setting.
So my advice is to leave as much on auto-negotiate as possible, but think of duplex in your LAN when everything pings but throughput is horrible or ANY time you use fiber links. If you MUST set a duplex, be SURE to set it at both ends identically, choose full duplex if both sides support it. (Note that this will make moving equipment very painful unless you have a company wide standard for speed and duplex, not a likely scenario)