The basic answer is that SQL Server is designed to use all of the memory available to it. It allocates the memory so that it has exclusive access to it even if it isn't using it. SQL uses sequential memory blocks in order to improve performance. That means it doesn't want to give other applications access to pieces of those blocks.
There are a couple things you can do. First, don't worry about it if you see SQL using all of the memory and things are working well. It most likely isn't a real problem. However, you should be sure that your SQL server is configured to leave some memory for the Operating System and any other applications you run on that server. You can configure the minimum and maximum amount of RAM SQL will use. The best advice I can give is that you give SQL all the memory you can. I usually reserve 2GB for the OS and give SQL the rest.
As far as SQL not releasing the memory or having a memory leak, that isn't really the case. It doesn't give the memory to the OS, but it isn't necessarily using the memory inefficiently. To learn more about how SQL uses memory and what you can do to better configure your server, read this article by Brent Ozar:
http://www.brentozar.com/archive/2011/09/sysadmins-guide-microsoft-sql-server-memory/[
^]