Physically No, logically Yes.
Suppose a function say add_one(in : std_logic_vector) return std_logic_vector; takes in a parameter of type 'std_loigc_vector', adds '1' to it and returns an 'std_loigc_vector'. Now suppose you want to add '1' to 1 bit binary number, and you are using this 'add_one' function. Then If there is no difference between 'std_logic_vectr(0 downto 0)' and 'std_logic' then you can easily pass either of the two to the function. But you cannot do that. you will have to pass the '1' bit binary number as std_logic_vector(0 downto 0) and not as 'std_logic'. So there is a difference.
Kr,
Avi http://www.vlsiip.com