Both expressions are correct and the difference in meaning between them is minimal. They both inform us when the action, to work, began and that it is ongoing.
Work is a verb which we can use in the present and present progressive tense.
- "She works in this company" describes a habitual action.
- "She is working at the moment" describes an action in progress but its duration is temporary.
Thus the present perfect progressive can be seen as related to the progressive and present aspect.
She has been working here since 1995
This sentence is acceptable but because the duration of the action is quite extensive, (18 years), people tend not to consider an action lasting that long to be temporary in nature.
Moreover, this response could answer one of many questions but without any specific context I can only make suppositions. My view is that the simplest, most logical and common question asked would be:
How long has she worked there?
It is important to note that the action is NOT finished. The person is still working for the same company. If not, the question ought to be like this:
- How long did she work there?
the answer would look something like this,
- She worked here for 18 years.
The action is completed and we naturally give the total number of years she worked for the company i.e. "for 18 years".
Someone who still works in the same company for 18 years (and therefore, has NOT been fired from her job) is likely to continue working there tomorrow, next month, and the year after etc. The implication being she has a steady, regular job. Therefore, the longer and the more permanent the action is, the more speakers will prefer the present perfect usage.
She has worked here since 1995.
Addendum
In the case of someone travelling to a place, normally we imagine someone either taking a plane, or hiking to a far-away land. In the OP's example São Paulo is the man's destination.
He has been traveling to São Paulo since the beginning of the year.
The "to" implies that the man has not yet arrived at São Paulo. The act of travelling to a place is still ongoing. Perhaps he is hitch-hiking and prefers to stop at different locations along the way. Although grammatically correct, it sounds a bit odd; normally speakers would say of people traveling in their sabbatical leave:
He's still traveling, and visiting different places before he arrives
at São Paulo.
The use of "ing" adds an element of dynamism to the sentence and implies the situation is evolving and progressing. If the intention was to say that the man is already in São Paulo, then both perfect aspects are acceptable and correct.
He has been traveling in/around São Paulo since the beginning of the year
and
He has traveled in/around São Paulo since the beginning of the year.
In this case I would prefer the ing structure (present progressive) because presumably the man at some point will return home, wherever that may be. Hence, the focus is on the temporality and dynamic aspect of the action.
A is for aspect http://youtu.be/NfyZOr4Gg64?t=1m16s
Born in New Zealand, Scott Thornbury, is a well-known academic in the field of English language teaching and author of many books on teacher training. Thornbury discusses the uses of present aspect in this video.
In my lifetime I've lived in many different countries. I've lived in England, Ireland, Spain and in Italy.
I lived in England when I was a young girl, and in Ireland for one year.
For the last ten years I have been living in northern Italy.
I could in the future live in a different country. Actually, I'm thinking of moving to Boston in the USA in the near future. Hence I used the present perfect tense in the first sentence.
I don't live in England or in Ireland now, therefore I used the past simple tense.
I now live in Italy, it's a temporary situation, I might move to Boston but I'm still thinking about it. Using the present perfect continuous tense emphasizes the temporality of my situation. If I had written, I have lived in Italy for the last ten years the meaning would be the same, the listener/reader would understand that I am living in Italy now.
Michael Swan in Practical English Usage has this to say:
Present perfect: actions and situations continuing up to the present (details)
Use of the present perfect
When we want to talk about actions or situations which started in the past and have continued up to the present, we often use the present perfect to show the connection between past and present. Note that we never use a present tense when we say how long a situation has been going on.
i) I've been waiting for three quarters of an hour.
ii) We have had this flat since 1955.
iii) I have always liked English people.
iv) I've studied human nature all my life.
The present perfect is also used for long actions and situations which started in the past and went on until very recently.
vi) I've painted two rooms since lunchtime.
vii) "You look hot." — "yes, I've been running."
viii) I've been reading some of your poetry. It's not bad.
[...]
Present perfect simple and progressive
The present perfect progressive is used especially for more temporary actions and situations; when we talk about more permanent situations, we prefer the present perfect simple. Compare:
- I've been living in Sally's flat for the last month.
- My parents have lived in Bristol all their lives.
- I haven't been working very well recently.
- He hasn't worked for years.
The present perfect simple is often used to express the idea of completion: to say that an action has just finished, or to talk about its results. The present perfect progressive emphasizes the continuation of the activity. Compare:
- I've been reading your book. (= I haven't finished it.)
I've read your book. (= I've finished it.)
I've been learning irregular verbs all afternoon.
I've learnt my irregular verbs. (= I know them.)
Sorry about the mess — I've been painting the house.
- I've painted two rooms since lunchtime.
Best Answer
The perfect progressive in the negative with a specified period of time is certainly grammatical and is used: "I haven't been running for the past 2 hours". The catch is that this usually requires some context. In this case you usually want to negate something that is being said or assumed: "I haven't been playing for the past 2 hours, I was doing my homework"
Lets simplify the 'for years' and look at the positive version: "I have been smoking during the last 30 days" - this implies that you started and never stopped (continuous action).
If we negate that it means that you have not been smoking for the past 30 days. While perfectly grammatical, this is ambiguous since it could be interpreted in at least 2 ways: "I have not been smoking during the last 30 days, but I have been smoking during the last 29 days" or "I have not been smoking during the last 30 days, I have been chewing gum instead" (i.e. "I stopped smoking 30 days ago and have not smoked at least until the time when the phrase is uttered")
This means that if you want to unambiguously say that you stopped smoking 1 month ago you say "I haven't smoked during the last month" (or "I haven't smoked for years")
As per WS2's answer there are also phrases like 'I haven't been swimming for years'. This is another use-case where the verb "to be" is replacing the verb "to go": "I haven't gone swimming for years" / "I haven't gone to swim for years"