Can someone explain to me the difference between 'not' and without?
Your first example (.id('not' ~ entry.id)) will exclude that entry ID from the results on in the actual database query.

Your second example will grab all of the entries that satisfy the criteria, then from the PHP/Twig side, then use the |without filter to loop through the array results and remove the ones that match the criteria.

Pretty sure your 2nd one won't work as you're expecting though, since you're telling it to remove an entry.id, which is an integer, but the results are an array of Entry elements. It might work just using entry instead, but I'm guessing the |without filter isn't smart enough to work on entire objects.

Long story short, use the 1st example.