Now that I read intersect documentation again it looks like this behavior is correct.
In the second syntax, intersect returns a list of all elements in list-A that are also in list-B, without eliminating duplicates in list-A
But, then, intersect function is not doing an intersection (on the other hand nobody says it should). From what I remember from studies, intersection of {1 2 2 2 3} and {2 2} is unambiguously {2 2} .
When elements in the participating sets are unique, intersect works like the algebraic intersection and the position of sets in the expression is commutative. When not using the true parameter, lists are converted into unique collections sets.
Almost always intersect is used in newLISP to make a selection of elements in one set depending of elements in another set. The positions in the intersect expression are not commutative when elements in a set are not unique. This and the true parameter give us more possibilities selecting elements than using pure algebraic intersection on unique collections.
I made two mistakes:
1) I didn't properly read intersect documentation so I expected it to do something a bit different.
2) I didn't realize that the algebraic intersection doesn't really make sense on lists with the same element more times.