They are exactly the same except:
.delegate() lets you narrow down the a local section of the page, while .live() must process events in the entire page.
.live() starts with a wasted DOM selection
When you call .delegate(), it just turns around and calls .live(), but passes the extra context parameter.
https://github.com/jquery/jquery/blob/master/src/event.js#L948-950
As such, I'd always use .delegate(). If you really need for it to process all events on the page, then just give it the body as the context.
$(document.body).delegate('.someClass', 'click', function() {
// run handler
});
Older versions of jQuery actually have delegate functionality. You just need to pass a selector or element as the context property when calling .live(). Of course, it needs to be loaded on the page.
$('.someClass', '#someContainer').live('click',function() {
// run handler
});
And you have the same behavior as .delegate().