Application Layer is meant to handle business logic and does indeed have a purpose.
Here is a basic example pulled off the top of my head;
Business Requirement:
===
First Name field should be under 51 characters, contain at least one vowel.
Last Name field should be under 51 characters, contain at least one vowel.
Address1 field should be under 251 characters, contain at least one vowel, and not match first or last name.
===
Client side is more about UX than enforceable data validation, so it is intentionally not covered but would go here.
Once submitted by the client you have to write logic to enforce the business logic and move on to proper typing.
Application Layer:
===
firstName is the First Name field, should be a STRING under 51 characters and contain at least one vowel.
lastName is the Last Name field, should be a STRING under 51 characters and contain at least one vowel.
address1 is the Address1 field, should be a STRING under 251 characters, contain at least one vowel and not match first or last name
===
That goes on to the data layer which doesn't necessarily know or care that First Name needs to have a vowel, or that Address1 shouldn't be the same as either name.
Data Layer:
===
String variable firstName is parameter @firstName and must be varchar(50)
String variable lastName is parameter @lastName and must be varchar(50)
String variable address1 is parameter @address1 and must be varchar(250)
===
Your data layer should know something is not right if firstName comes in typed as an int, or is a string over 50 characters. It should gracefully decline the request because that's not what it's there to package and ship out.
This leads to the database.
Database:
===
@firstName is arriving as varchar(50)
@lastName is arriving as varchar(50)
@address1 is arriving as varchar(250)
===
If the above isn't met, the Database will tell the Data Layer which will tell the Application Layer and it will either inform the Client or log it away for later reflection.
If you didn't have the Application Layer validation you'd not know that Address1 can't match First Name which has to have a vowel. If you didn't have the Data Layer, you'd not be able to take the result of that computation and pass it on to the Database. It all works together and is there whether you departmentalize it or not. You just may be skipping a step that you should be doing and not realize that you're intertwining areas that should be kept separate for the reasons stated above.