Ages are not quite the same as dates, and the real problem is that you are accessing the number of years - which is an integer value, and only considers the year number in the calculation. So
SELECT datediff(yy,'1986-01-01','2003-12-31') AS years
And
SELECT datediff(yy,'1986-01-01','2003-01-01') AS years
Will also both return 17.
A solution is to use the number of months:
SELECT datediff(mm,'1986-01-01','2003-12-31') AS months
which is a little better - you can compare the number of months against 18 * 12, but it's still not that helpfull if you need to have an exact cut off date at 18 years:
SELECT datediff(mm,'2003-11-30','2003-12-01')AS months
returns 1 for example.
A better solution is to add the years to the start date:
SELECT DATEDIFF(dd, DATEADD(yy, 18, '1986-12-06'), '2013-10-12') as DAYS
If the result is negative they are under 18, if it's greater than zero they are over 18, and if it is zero it's their 18th birthday!