They are quite different actually.
filter
operates on the matched elements:
Reduce the set of matched elements to those that match the selector or pass the function's test.
has
filters based on the descendants of the matched elements:
Reduce the set of matched elements to those that have a descendant that matches the selector or DOM element.
Practical example:
<span class="outer">outer span</span>
<div class="outer">
outer div<br>
<span>descendant span</span>
</div>
$('.outer').filter('span'); //returns the outer span
$('.outer').has('span'); //returns the outer div