There's quite a big difference.
SET FILTER operates on an existing table or cursor. It doesn't create a new table or cursor. It simply tells VFP to ingore all records that don't meet the filter condition.
So, if you SKIP or SCAN through the table, you will only see those records that meet the condition. The other records are still there of course, but VFP will pretend they don't exist.
With SELECT, you are creating a new table or cursor (more exactly, a new "result set") that only contains the records that meet the condition. Think of it as a copy of the original table, containing just a subset of the records (and fields).
As to which is faster, that depends on what indexes you have. Both options can be optimised, so if the indexes are correct, there shouldn't be any signficant differences in performance. At least, that's the theory. In practice, there are several cases where SET FILTER performs badly and should be avoided.
The usual advice is to favour SELECT over SET FILTER. That's my own choice as well, although it partly comes down to personal preference.
Mike
__________________________________
Mike Lewis (Edinburgh, Scotland)
Visual FoxPro articles, tips, training, consultancy