Perhaps the most obvious difference is that with siege you can specify a list of URLs that you want accessed ( some could cause reads and others writes) and in so more realistically load your website as a whole.
Testing a single url with ab gives you different kind of information that is more artificial compared to the overall function of a site, but sometimes it may be the data that you are looking for. You can achieve this also with siege. Older versions of siege seem to keepalive connections not working...from the man "# TRIPLE CAUTION: don't use keep-alives until further notice" and if you find that you need to test with keep-alives you are back to ab. NOTE: the trunk of siege seems to have keep-alives functioning.
These are at least a couple of differences.
I do use siege, but it seems that the keepalive support in siege is broken. At least their man says - DONT USE IT.
So many people use ab, for whatever reasons, and if they do, they should be aware of this quirk.