The most important difference is that they do *not* both enable name
resolution within different domains.
A Delegation can only be set in a parent domain. For example, a
delegation for sub.domain.com can only be configured within domain.com.
Both "sub.domain.com" and "domain.com" are part of the same namespace
(domain.com).
Delegation is most heavily used for public name resolution where you have:
. (DNS Root) --Delegation--> .com --Delegation--> google.com
When a DNS server (your local DNS server, for example) performs a lookup
for google.com (and when it isn't using Forwarders) it will first ask
those responsible for ".", then ".com" and finally "google.com". This is
Iterative Name Resolution in response to a request for Recursion. Each
iteration follows a delegation from parent to child.
If you use forwarders (global not conditional) you hand that work off to
another server, sitting back to wait for the answer.
Conditional Forwarders cannot be used in this scenario, they are not
visible to a client performing a query (your local DNS Server is the
client in this situation). Any server using a Forwarder must support
requests for Recursion (it must perform name full name resolution on
behalf of the asker) or it won't return an answer at all.
Typical usage is something like this:
SomePC ---> LocalDNSServer ---> SomethingWithAForwarder
SomethingWithAForwarder does all the work and returns the response.
LocalDNSServer simply relays the answer back to the client.
SomethingWithAForwarder may be using conditional or global forwarders,
LocalDNSServer has no way of knowing.
Note that servers hosting public DNS zones will not, generally, support
Recursion. They will return the best answer they can (equivalent to "I
don't know, ask <delegate>").
If you are building a high-capacity / high-load distributed name
resolution system you should properly configure Delegations. Conditional
Forwarding increases the load on specific DNS Servers, countering the
point of delegating responsibility for zones.
HTH
Chris